使用git rebase重新创建非快进合并

时间:2014-01-12 13:02:32

标签: git merge rebase git-flow

因为我听说作为一个懒惰的程序员是一种美德,我推迟了我的git-flow功能分支的创建:

* dca9fae - Merge branch 'feature/refactor' into develop
|\
| * 9ca4bc3 - Delivery task
| * 8b2e03f - rf up Repo DSL attributes
|/
* e1ddb98 - access to self.views made private
* 0ab6725 - extract Repo#aggregate
* 9bf6ca0 - Merge branch 'feature/mapper'

我希望通过提升我的两个重构提交来清理我的提交历史记录,并得到类似的结果:

* dca9fae - Merge branch 'feature/refactor' into develop
|\
| * 9ca4bc3 - Delivery task
| * 8b2e03f - rf up Repo DSL attributes
| * e1ddb98 - access to self.views made private
| * 0ab6725 - extract Repo#aggregate
|/
* 9bf6ca0 - Merge branch 'feature/mapper'

我的原始编辑我的提交历史记录是:

git rebase -i 9bf6ca0

可悲的是,这破坏了我不错的非快进合并泡沫并将整个事情弄平了这样的事情:

* dca9fae - Merge branch 'feature/refactor' into develop
* 9ca4bc3 - Delivery task
* 8b2e03f - rf up Repo DSL attributes
* e1ddb98 - access to self.views made private
* 0ab6725 - extract Repo#aggregate
* 9bf6ca0 - Merge branch 'feature/mapper'

如何使 git rebase 保留我的非快进合并?

我不仅对如何从第一个例子开始获取我的第二个例子感兴趣,而且还从第三个例子开始。

1 个答案:

答案 0 :(得分:1)

基本上你可以这样做:

git reset --hard 9ca4bc3
git merge --no-ff 9bf6ca0

不幸的是,您确实告诉了您的分支机构目前指向的位置。你真正想要的可能是这样的:

git checkout refactor
git reset --hard 9ca4bc3
git checkout develop
git reset --hard 9bf6ca0
git merge --no-ff refactor

您也没有指定上游分支指向的位置。注意不要更改已发布的任何提交。


在您的情况下,

git rebase没有意义。它只需要你的提交并将它们添加到新的基础。在您的情况下,旧基数似乎与新基数完全相同,因此结果与之前完全相同。 (仅缺少合并提交。)