Git rebase : Combine non-subsequent commits

标签 git git-rebase

到现在为止,我知道有一种很好的方法可以使用“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 期间带来冲突的可能性;在示例中,如果 commitBcommitC 更改了文件的相同部分,就会发生这种情况。考虑到这一点,我经常通过首先重新排序提交来处理冲突(在示例 pick A, C BD),然后进行提交组合(squashfixup)。我发现冲突管理通过这种方式变得更容易,尤其是当我在执行此操作的过程中被打扰时。

关于Git rebase : Combine non-subsequent commits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15406093/

相关文章:

git - 错误: RPC failed; HTTP 502 curl 22 The requested URL returned error: 502 Bad Gateway fatal

git rebase -i 提交标志?

git - SSH 身份验证在 Jenkins Git 轮询上失败(适用于手动触发)

git - cygwin git 认为文件以前有不同的模式

python - 运行 python 单元测试时切换分支

git - 重新设置主题分支而不是 merge 的缺点是什么?

git - 需要 git rebase -Ignore-all-space 来保留我的空间

git - 重新设置一个分支,包括它的所有子分支

GIT 在 rebase 期间创建无关的 ~HEAD 文件

git - 当本地主分支上没有工作时, git pull --rebase 是否与 git pull 相同?