我有一个源文件,其中添加了 2 个功能。为了允许挑选,我想分两个阶段提交:每个功能一个阶段。到目前为止,在类似的情况下,使用git add -p
很好地为我服务,提交一个功能,同时将本地文件留在最后阶段。
但是,我现在有一个问题,就是git add -p
想要制作一个包含两个功能的编辑的大块头。即使编辑在不同的行上,s
(对于“拆分”)不再想将大块分成更小的部分......
简而言之:我无法以这种方式分离 2 个功能的更改。有没有办法手动编辑补丁,例如使用 vi,而不实际更改原始文件?
正如 Alan 所说e
,s
在git add -p
. 这将使用该补丁启动您的编辑器,以便您可以手动编辑它。文本中有解释如何正确丢弃修改的注释,实际上很容易。
完成后,请注意,您只能使用刚刚添加的更改来测试它git stash --keep-index
。您未添加到索引中的更改将被隐藏起来,您现在可以自由地测试您将要提交的更改。完成后,简单地git stash pop
或git stash apply
将其他更改取回。
就像其他人说的那样,您可以使用e
来编辑要拆分的块。
要仅添加大块的一部分,您可以从要拆分的更改中删除行。
+Line 1
+Line 2
+Line 3
假设您想将第 1 行和第 3 行保留在一个提交中,将第 2 行保留在另一个提交中。您所要做的就是删除第 2 行:
+Line 1
+Line 3
这会将 1 号线和 3 号线置于您的临时区域。第 2 行仍将被编入索引,但不会暂存。
e
您可以通过在 中按 来编辑补丁git add -p
。它不会影响原始文件。
git stash pop
我通常会从@Dan 的回答中描述的合并冲突。有关避免冲突的解决方案,请参阅git stash 和edited hunks。