如何在有孩子的分支上压缩提交

时间:2015-01-09 17:57:51

标签: git rebase squash

所以我有一个主人和一个bugfix分支的情况继续它。我尝试在master上压缩一些提交,然后在它上面修改bugfix但是我遇到了合并冲突。这样做的正确方法是什么?我在当地工作,没有遥控器。

看起来像这样:

A - B - C - D - E - F [master]
                     \                 
                      G - H - I - J - K [bugfix]

我想压制A - B - C - D - E - F并且仍然有错误修复继续被压扁的主分支。

1 个答案:

答案 0 :(得分:4)

Jubob关于共享历史的观点是一个非常重要的观点,因为强烈反对重新定位或压缩共享提交。

我将假设您正在使用本地提交。

假设您从这开始:

[master] A---B---C---D
                      \
[bugfix]               1---2---3

您决定将BCD压入新的提交D'

[master] A---D'
          \
[bugfix]   B---C---D---1---2---3

请注意,提交BCD仍保留在bugfix分支中。如果您只是将bugfix重新绑定到master,Git会尝试这样做:

[master] A---D'
              \
[bugfix]       B---C---D---1---2---3

BCD引入的更改已包含在D'中。你真正想要的是:

[master] A---D'
              \
[bugfix]       1---2---3

您可以使用rebase--onto选项完成此操作:

git rebase --onto master D bugfix

D应该是bugfix中的最新提交,在重新定位时 不应包含在内。