我有一个源文件,其中添加了2个功能。为了允许采摘樱桃,我想分两个阶段:每个功能一个。到目前为止,在类似的情况下,使用git add -p
很好地为我提供了一个功能,同时让本地文件保持在最后阶段。
但是,我现在遇到git add -p
想要进行包含两个功能编辑的大块的问题。即使编辑在不同的行上,s
(对于“拆分”)也不再希望将大块拆分成更小的块......
简而言之:我无法通过这种方式分离2个功能的更改。有没有办法手动编辑补丁,例如使用vi,而不实际更改原始文件?
答案 0 :(得分:24)
正如艾伦所说,在e
期间按s
(而不是git add -p
)编辑补丁。这将使用补丁的大部分启动编辑器,以便您可以手动编辑它。文中有评论说明如何正确地丢弃修改,这实际上非常简单。
完成后,请注意您可以通过执行git stash --keep-index
仅使用刚刚添加的更改来测试。您未添加到索引中的更改将被隐藏起来,您现在可以自由测试您即将提交的更改。完成后,只需git stash pop
或git stash apply
即可恢复其他更改。
答案 1 :(得分:6)
与其他人说的一样,您可以使用e
来编辑要拆分的数据块。
要仅添加部分隐藏,您可以删除要拆分的更改中的行。
+Line 1
+Line 2
+Line 3
假设您希望将第1行和第3行保留在一个提交中,将第2行保留在另一个提交中。您所要做的就是删除第2行:
+Line 1
+Line 3
这会将第1行和第3行放入您的临时区域。第2行仍将被编入索引,但不会上演。
答案 2 :(得分:5)
您可以在e
期间按git add -p
来修改修补程序。它不会影响原始文件。
答案 3 :(得分:1)
答案 4 :(得分:0)
我通常会从@ Dan的答案中描述的git stash pop
中获得合并冲突。有关避免冲突的解决方案,请参阅git stash and edited hunks。