重新绑定一个Git合并提交
采取以下情况:
我有一些主题分支的工作,现在我已经准备好合并回主:
* eb3b733 3 [master] [origin/master] | * b62cae6 2 [topic] |/ * 38abeae 1
我执行从主合并,解决冲突,现在我有:
* 8101fe3 Merge branch 'topic' [master] |\ | * b62cae6 2 [topic] * | eb3b733 3 [origin/master] |/ * 38abeae 1
现在,合并花了我一些时间,所以我做了另一个提取,并注意到远程主分支有新的变化:
* 8101fe3 Merge branch 'topic' [master] |\ | * b62cae6 2 [topic] | | * e7affba 4 [origin/master] | |/ |/| * | eb3b733 3 |/ * 38abeae 1
如果我尝试从主站'git rebase origin / master',我不得不再次解决所有冲突,而且我也失去了合并提交:
* d4de423 2 [master] * e7affba 4 [origin/master] * eb3b733 3 | * b62cae6 2 [topic] |/ * 38abeae 1
是否有一个干净的方式来重新合并提交,所以我最终有一个像我下面显示的历史?
* 51984c7 Merge branch 'topic' [master] |\ | * b62cae6 2 [topic] * | e7affba 4 [origin/master] * | eb3b733 3 |/ * 38abeae 1
这里有两个选项。
一个是做一个交互式的重新分配和编辑合并提交,手动重做合并,并继续rebase。
另一个是在git rebase
上使用-p
选项,在手册中描述如下:“而不是忽略合并,尝试重新创build它们。 这个问题进一步解释了这个问题: git的“rebase –preserve-merges”究竟做了什么(为什么?)
它看起来像你想要做的是删除你的第一次合并。 您可以按照以下步骤操作:
git checkout master # Let's make sure we are on master branch git reset --hard master~ # Let's get back to master before the merge git pull # or git merge remote/master git merge topic
那会给你你想要的。