美文网首页
一个常见的git问题:多人协作时如何安全地撤销一次分支合并

一个常见的git问题:多人协作时如何安全地撤销一次分支合并

作者: Aragorn_Hope | 来源:发表于2018-01-22 20:13 被阅读0次

    这是一个在实际工作中遇到的case,感觉具有一定的普适性,写下来分享一下。

    在多人协作中,我们的项目的git分支通常是这样的:每个人有各自的开发分支,开发测试完成后,会合并到master分支进行上线。下图中,A和B的开发分支分别为deva和devb,项目的主分支为Master.



    在一次开发中,A开发完成后,将自己的开发分支deva分支合并到master,这次合并被记为Master-3. B有一个良好习惯,就是定时合并master分支,B在A之后将master分支合并到了自己的开发分支。这样,B的开发分支上也有A的开发代码了。此后,B继续进行了一系列的开发,两次提交被记为devb-4和devb-5。如下图所示:


    之后,A发现自己的开发代码有问题,于是撤销了向master分支的合并Master-3. 但此时,B已经将Master-3同步到了自己的开发分支。如下图所示。


    那么,在这种情况下在B的开发分支上该如何有效地撤销呢?

    我们想要达成的结果是这样的:在B的开发分支上撤销从Master-3向B的合并,同时保留B自己的两次提交devb-4和devb-5的开发代码.

    可以在B的开发分支上通过下面的几步操作来完成:

    1.git reset devb-3

    2.git stash

    3.git reset --hard devb-2

    4.git stash pop

    5.git commit & push

    解释一下这几步的操作。第1步之后,devb-4和devb-5的两次提交就不存在了,但这两次提交的代码却能保留在git的工作区中。通过第2步的stash操作,可以将工作区中的代码暂存起来,即暂存了devb-4和devb-5的开发代码。第3步操作通过reset --hard,可以将分支回退到devb-2,同时不会在工作区保留devb-3分支的代码,这样就完成了撤销合并的操作。 第4步和第5步,将暂存起来的devb-4和devb-5 取出来并提交,即保留了devb-4和devb-5的开发代码。完成操作后的git分支如下图所示:


    相关文章

      网友评论

          本文标题:一个常见的git问题:多人协作时如何安全地撤销一次分支合并

          本文链接:https://www.haomeiwen.com/subject/aseraxtx.html