我刚刚在它自己的分支(分支feature)上开发了一个新特性,包括十几个提交。在运行所有测试之后,我将这个分支合并到master中,并解决了许多合并冲突。这个过程花了很长时间。只有在我完成了合并之后,我才意识到我从来没有在feature分支中重新建立任何提交的基础,这通常是我的实践。
简言之,我现在有:
(feature) B-C-D
(master) A-/ \-E (merge commit in master)但我想要:
F
A-/ \-D其中F=B+C+D“挤”在一起。
我这样做的方式是从master创建另一个分支A,从提交A开始。然后,切换到feature分支,完成我想要的所有提交压缩。最后,将feature合并到master_prime中。唯一的问题是,我必须再次解决所有合并冲突。是否有一种方法可以重放/选择合并提交E,这样就不需要这样做了?
我还尝试过git rebase --preserve-merges -i <A>和git rebase -i <A>,它们不允许我分别重新设置我想要的提交或让我再次处理合并冲突。
发布于 2014-03-16 19:40:55
使用git read-tree重用合并冲突的解决方案。
我假设您将feature合并到master中。如果将master合并到feature中,则使用master^2而不是master^ (反之亦然)。
feature中的提交。确保你不会意外地改变任何东西。
git结帐功能# ..。把所有的东西..。git diff主^2feature分支合并到master中,重用旧的冲突解决方案。
git合并功能git读取树-重置-u合并备份git提交发布于 2014-02-25 22:34:21
我认为可能有很多方法可以实现你想要的,但首先有几件事:
( 1)如果你不想,你不需要一个新的硕士分支。您可以使用git reset将当前主分支的点更改为A或其他什么,而不需要新命名的分支。(你也可以创建你的新master_prime,做你想让它到“地球上最好的地方”,把master改名为master_old,把master_prime重命名为master )。
但这不是重点,因为这并不是你想要的。
您需要的是特性分支feature,其中包含从A到D所需的所有更改。还有..。进行合并所需的更改。在这一点上,您可能想要重新基地,因为这仍然是一个痛苦。但是,您可以执行压缩操作并将合并编辑复制到适当的位置(使用reset而不是留给读者的一个新分支):
git checkout A
git checkout -b feature2
git cherry-pick B..D
... squash away here ...
git cherry-pick E # copies the merge pain in
git checkout master
git merge feature2我认为
https://stackoverflow.com/questions/22027199
复制相似问题