26

我有一个源文件,其中添加了 2 个功能。为了允许挑选,我想分两个阶段提交:每个功能一个阶段。到目前为止,在类似的情况下,使用git add -p很好地为我服务,提交一个功能,同时将本地文件留在最后阶段。

但是,我现在有一个问题,就是git add -p想要制作一个包含两个功能的编辑的大块头。即使编辑在不同的行上,s(对于“拆分”)不再想将大块分成更小的部分......

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

4

5 回答 5

27

正如 Alan 所说esgit add -p. 这将使用该补丁启动您的编辑器,以便您可以手动编辑它。文本中有解释如何正确丢弃修改的注释,实际上很容易。

完成后,请注意,您只能使用刚刚添加的更改来测试它git stash --keep-index。您添加到索引中的更改将被隐藏起来,您现在可以自由地测试您将要提交的更改。完成后,简单地git stash popgit stash apply将其他更改取回。

于 2010-02-25T12:28:13.530 回答
6

就像其他人说的那样,您可以使用e来编辑要拆分的块。

要仅添加大块的一部分,您可以从要拆分的更改中删除行。

+Line 1
+Line 2
+Line 3

假设您想将第 1 行和第 3 行保留在一个提交中,将第 2 行保留在另一个提交中。您所要做的就是删除第 2 行:

+Line 1
+Line 3

这会将 1 号线和 3 号线置于您的临时区域。第 2 行仍将被编入索引,但不会暂存。

于 2010-02-25T12:36:56.567 回答
5

e您可以通过在 中按 来编辑补丁git add -p。它不会影响原始文件。

于 2010-02-25T12:17:40.783 回答
1

有 Git GUI 可以让您选择要暂存的各个行,从而允许您拆分通常无法git add --patch从命令行使用常规的行。

两个这样的 GUI 是:

  1. 源树
  2. 吉特可乐
于 2013-07-14T19:10:20.673 回答
0

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

于 2011-11-08T14:14:10.390 回答