代码之家  ›  专栏  ›  技术社区  ›  wired_in

撤消由bitbucket拉取请求创建的git合并

  •  1
  • wired_in  · 技术社区  · 7 年前

    我知道有很多关于在git中撤消合并的信息,但在我的具体情况下,我似乎找不到任何关于如何做到这一点的共识。

    develop master 通过bitbucket中的pull请求进行分支。这是今天刚刚发生的,所以这是在主分支上完成的最后一件事(我们不必担心合并提交上的其他提交)。

    我们自己托管bitbucket,所以我们有一个较旧版本的bitbucket。没有反向拉取请求选项。

    据我所知,在git中基本上有两种处理方法:

    1. git reset --hard *<SHA of commit before the merge>*

      • 发展
      • 如果这是最好的方法,我们做到了,那么bitbucket中的pull请求会发生什么变化?该拉请求仍然存在于bitbucket中,但我们正在删除它创建的合并提交,那么这会以任何方式扰乱bitbucket吗?
    2. git revert -m 1 *<SHA of the merge commit>*

      • 这将创建一个新的提交,用于撤消合并所做的更改
      • 这很好,除非我们真的打算合并 发展 主人 在稍后的日期(下一个版本),根据我所阅读的内容,我们必须记住在执行此操作之前还原我们的revert commit,否则当我们合并时 发展 进入

    TL;博士: git revert git reset 因为每个人似乎都警告不要这样做,这可能会导致bitbucket上的pull请求出现问题。

    2 回复  |  直到 7 年前
        1
  •  1
  •   max630    7 年前

    你两者都可以。确实没有决定性的技术原因来决定你该做什么。

    1. 您可以转发 development 分支以还原提交,然后 revert the revert

    对于原始案例

    * 73d5415 (HEAD -> master) master3
    | * e660100 (development) development3
    | * 0356d3a development2
    | * 6cefad0 development1
    |/  
    * 209d967 master2
    * dc25505 master1
    

    您合并了 发展 master ,并将其还原。

    * 7a4f94a (HEAD -> master) Revert "Merge branch 'development'"
    *   75e1e34 Merge branch 'development'
    |\  
    | * e660100 (development) development3
    | * 0356d3a development2
    | * 6cefad0 development1
    * | 73d5415 master3
    |/  
    * 209d967 master2
    * dc25505 master1
    

    现在要解决它,你应该这样做

    $ git checkout development
    $ git merge --ff-only master
    $ git revert 7a4f94a (the "Revert" commit)
    

    结果:

    e7b511a (HEAD -> development) Revert "Revert "Merge branch 'development'""
    * 7a4f94a (master) Revert "Merge branch 'development'"
    *   75e1e34 Merge branch 'development'
    |\  
    | * e660100 development3
    | * 0356d3a development2
    | * 6cefad0 development1
    * | 73d5415 master3
    |/  
    * 209d967 master2
    * dc25505 master1
    

    e7b511a e660100 .

        2
  •  0
  •   RuSh    7 年前

    [由于我还没有获得足够的声誉,我无法对您的问题发表评论,因此添加我的评论作为答案]

    force-push . 参考 git force-push 示例和选项。

    这是一个有争议的答案,因为有许多人反对它。但是当你使用 bitbucket 这个 强制推送 为了你的主人。

    注: 最新的插件,如 rebase squash 使用 --force-with-lease