到现在为止,我知道有一种很好的方法可以使用“git rebase --interactive”来组合提交和更改提交消息
有以下情况:
$ git rebase --interactive HEAD^^^^
pick 5b7c140 commitA
pick 40ffd7c commitB
pick 5e7647d commitC
pick 78bea2d commitD
Rebase [...]
是否还有可能处理以下要求:
将 commitA 和 commitC 以及 commitB 和 commitD merge 到新的提交 cAC 和 cBD?
最佳答案
这是可能的——您还可以使用交互式 rebase 重新安排提交的顺序:
pick 5b7c140 commitA
squash 5e7647d commitC
pick 40ffd7c commitB
squash 78bea2d commitD
或
pick 5b7c140 commitA
fixup 5e7647d commitC
pick 40ffd7c commitB
fixup 78bea2d commitD
两者之间的区别在于 squash
允许您编辑新提交的提交消息,而 fixup
只是丢弃第二个提交消息,留下前面的 pick
merge 提交的提交消息。 (如果您的编辑器启动速度足够快,那么养成只选择 squash
的习惯会给您一个很好的机会来查看提交消息,即使您认为您可能不需要使用fixup
commit.)
重新排序提交会在 rebase 期间带来冲突的可能性;在示例中,如果 commitB
和 commitC
更改了文件的相同部分,就会发生这种情况。考虑到这一点,我经常通过首先重新排序提交来处理冲突(在示例 pick
A
, C
、B
、D
),然后进行提交组合(squash
、fixup
)。我发现冲突管理通过这种方式变得更容易,尤其是当我在执行此操作的过程中被打扰时。
关于Git rebase : Combine non-subsequent commits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15406093/