为什么 git add -p 命令中缺少拆分选项?

34

尝试使用 git add -psplit 选项将一个巨大的块分成更小的块,但整个文件看起来像一个块,我无法将其拆分。

  1. 我可以进行编辑,但删除行会导致补丁失败。
  2. git help add 告诉我应该已经分割过了,并且我记得我使用过它,但在当前示例中,该选项未出现在提示中。
  3. 当我选择该选项时,会打印帮助信息,其中提到我可以选择 s 来拆分 :-[。

Git 版本:1.9.1。Xubuntu 14,oh-my-zsh。这个块不是一行,而是多行。有没有想法为什么会这样?

附带更多数据进行编辑,以下是控制台日志:

+last line of long text 
Stage this hunk [y,n,q,a,d,/,e,?]? s
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk nor any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk nor any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help

我相信你必须先进入交互模式(-i)才能使用 split。 - Lee Duhem
立即尝试了一下,但遗憾的是-效果相同。如果我没记错,git add -p只是绕过原始选项窗口,直接跳转到打补丁。文档也是这么说的(现在已经检查过)。还是谢谢。 - LAFK says Reinstate Monica
这将在Git 2.17(2018年第二季度)中更容易实现,它将显示更精确的帮助信息。请参见下面的我的答案 - VonC
2个回答

37

原因是你的补丁已经如此小,以致于git无法自动获取它。只有当存在未更改的行分隔更改的行足够接近,以至于git认为它们属于同一部分时,Split才能起作用。

为了达到你的目的,你需要手动编辑补丁


4
啊!确实有没有改变的行与改变的行分开,那我就在没有 Git 的情况下拆分内容,并逐部分添加。 /me 感谢! - LAFK says Reinstate Monica

5
为什么git add -p中缺少split选项?
在Git 2.17(2018年第二季度)之后,您将不必提出这个问题,因为只有启用的键才会显示单键帮助(例如,当只有一个块时,将不会显示“/”的帮助)。
请参见提交4bdd6e7提交88f6ffc提交01a6966(由Phillip Wood (phillipwood)于2018年2月13日提交)。
(由Junio C Hamano -- gitster --提交60f8b89中合并) 首先:

add -p: 改进错误消息

如果用户按下当前未激活的键,则解释为什么未激活它,而不仅列出所有键。对于某些键,它已经执行了此操作,而此补丁会为未处理的键执行相同的操作。

然后:

add -p: 仅显示活动键的帮助

如果用户按下add -p未预期的键,则它会打印一个键绑定列表。
尽管提示只列出活动绑定,但是帮助却打印了所有绑定。

通过使用提示中的键列表来过滤帮助来解决此问题。
请注意,调用方已将键列表传递给help_patch_cmd(),因此不需要更改调用站点。


2
点赞!我会保留“已接受”的状态,因为我相信现在更多的人会从中受益。无论如何,还是非常感谢@VonC! - LAFK says Reinstate Monica
@LIttleAncientForestKami 我同意:被接受的答案仍然是正确的。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接