如何删除已推送到原点的合并分支

时间:2015-07-27 11:24:20

标签: git merge gitlab

例如,我有1个缺陷问题,开发人员创建新分支,并将其修改为分支名称“fix_#1_backyard_data_displayed”。然后,我将它合并到分支“beta”中进行测试。过了一会儿,另一个测试人员将“fix_2”和“fix_3”之类的另一个分支合并到“fix_20”中并测试它。在那之后,我发现我的第一个合并的“fix_#1_backyard_data_displayed”分支是错误的并且使我们的应用程序不稳定。

现在,如何在不干扰“fix_2”和“fix_3”到“fix_20”的情况下删除已经推送到原点的合并分支?

2 个答案:

答案 0 :(得分:1)

简短回答

beta分支中:

  1. 找到与合并对应的提交的SHA1。
  2. 运行git revert <sha1> -m 1
  3. 有一点需要注意:Git仍然会认为此功能分支已合并到beta分支中,并且要再次合并此分支,您需要还原(再次)此引入的提交{合并前{1}}。

    更长的版本

    Git中撤消提交的命令是git revert。对于合并提交,您需要指定&#34;主线&#34;使用revert开关分​​支。在你的情况下,它应该是1:

      

    通常您无法恢复合并,因为您不知道合并的哪一侧应该被视为      主线。此选项指定主线的父编号(从1开始)并允许恢复      反转相对于指定父级的更改。

         

    恢复合并提交声明您永远不会希望合并带来的树更改。作为一个      结果,以后的合并只会带来由不是祖先的提交引入的树更改      以前还原合并。这可能是也可能不是你想要的。

         

    有关详细信息,请参阅revert-a-faulty-merge-To-To [1]。

    (来源:-m

    以下git help revert脚本演示了这一点。第一个sh命令恢复合并revert分支的提交,在这种情况下,它是倒数第二个提交,即fix1。在还原之后,在再次合并HEAD^分支之前,需要使用另一个fix1命令撤消恢复:

    revert

答案 1 :(得分:0)

我在这里找到了解决方案:

branch_to_revert="fix1"; git log --all --pretty=format:"%H %s" | grep -i "Merge branch '$branch_to_revert'" | grep -v "Revert" | awk '{print $1}' | xargs git revert -m 1