2011-12-13 137 views
2

我有一个功能分支,我们称之为“myfeature”,我一直在努力。客户希望我把它放在测试站点上,所以我将它合并到“分段”分支中并推送到原点。从那以后,我在“分段”分支上做了几次提交。今天,客户决定不再需要“我的身份”。撤销git merge几次提交前

如何撤消合并我之前做过几次提交?我仍然有“myfeature”分支。我基本上想要将该分支中的所有更改从“分段”分支中取出,并将“newfeature”保存另一次。

+0

你可以重新设计暂存分支吗?换句话说,其他人是否有该分支的副本? – svick

+1

你是如何进行合并的?它是一个快速合并?因为如果它是一个“真正的合并”(这是它在man page上的调用方式),你可以尝试恢复合并提交。 – Unapiedra

+0

@svick,其他人确实有分支的副本,但他们都与远程同步,也就是说,自合并以来他们已经做了几次拉动 – UncleCheese

回答

3

您可以使用git revert恢复合并,但你必须指定(通过-m选项)合并的父数量承诺,你要恢复到。假设您有这样的历史记录:

c1--c2----------c5--c6--c7 
    \--c3--c4--/ 

合并提交是c5。你可以恢复合并:

$ git merge -m 1 c5 

通常主分支是第一个父类,所以-m 1通常工作。

更多资料可浏览here

+0

我想@mipadi试图说'恢复合并',使用'git revert -m 1 c5'。参考:https://git-scm.com/docs/git-revert – user3454439

0

这是我们在使用的过程:

https://plus.google.com/109096274754593704906/posts/R4qkeyRadLR

它非常好正是这种情况。当不再需要功能时,您可以非常轻松地进行重建。关键是不要“解除”某个功能;您需要合并所有其他功能并省略不再需要的功能。 Martin Fowler系列的连续发行书通过查看每个功能部件的旧式分支方式而造成巨大的损失。 “高级版本控制”部分不是很好,因为它围绕这些问题进行了跳舞。

0

难道你不能恢复合并提交吗?

git revert <SHA1-OF-MERGE-COMMIT>