如何在选择性分期期间编辑Git“添加补丁”帅哥/差异/线条?

时间:2010-02-25 12:13:10

标签: git commit patch split git-add

我有一个源文件,其中添加了2个功能。为了允许采摘樱桃,我想分两个阶段:每个功能一个。到目前为止,在类似的情况下,使用git add -p很好地为我提供了一个功能,同时让本地文件保持在最后阶段。

但是,我现在遇到git add -p想要进行包含两个功能编辑的大块的问题。即使编辑在不同的行上,s(对于“拆分”)也不再希望将大块拆分成更小的块......

简而言之:我无法通过这种方式分离2个功能的更改。有没有办法手动编辑补丁,例如使用vi,而不实际更改原始文件?

5 个答案:

答案 0 :(得分:24)

正如艾伦所说,在e期间按s(而不是git add -p)编辑补丁。这将使用补丁的大部分启动编辑器,以便您可以手动编辑它。文中有评论说明如何正确地丢弃修改,这实际上非常简单。

完成后,请注意您可以通过执行git stash --keep-index仅使用刚刚添加的更改来测试。您添加到索引中的更改将被隐藏起来,您现在可以自由测试您即将提交的更改。完成后,只需git stash popgit 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)

有一些Git GUI可以让你选择你想要分段的各个行,允许你从命令行中拆分你通常无法使用常规git add --patch的行。

两个这样的GUI是:

  1. SourceTree
  2. Git Cola

答案 4 :(得分:0)

我通常会从@ Dan的答案中描述的git stash pop中获得合并冲突。有关避免冲突的解决方案,请参阅git stash and edited hunks