撤消由bitbucket拉取请求

时间:2017-09-08 18:06:23

标签: git version-control bitbucket git-merge

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

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

  

注意:我们自己托管bitbucket,所以我们有一个旧版本的bitbucket。没有恢复请求选项。

从我的阅读中,基本上有两种方法可以在git中处理它:

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

    • 这将删除合并提交,就好像它从未发生过一样。
    • 我到处都读到“重写历史是不好的做法”或“从不在公开共享的回购中做这件事”,但他们从未真正解释过为什么不这样做。这似乎可以解决问题,并且从现在起6个月后我们确实想要将此合并从develop重做为master
    • 它不会成为问题
    • 如果这是最好的方法,我们这样做,bitbucket中的pull请求会发生什么?这个拉取请求仍然存在于bitbucket中,但是我们正在删除它创建的合并提交,所以这会以任何方式搞乱bitbucket吗?
  2. git revert -m 1 *<SHA of the merge commit>*

    • 这将创建一个新的提交,撤消合并
    • 所做的更改
    • 这没关系,除非我们打算稍后将develop合并到master(下一个版本),并且从我读过的内容中,我们必须记得还原在执行此操作之前我们的还原提交,因为否则当我们将develop合并到master时,我们今天还原的更改将不会包含在内。我真的不想让这个问题在6个月后成为一个问题,当时没有人记得这个还原。
  3. TL; DR:我对git revert犹豫不决,因为从那时起我们想要再次进行合并可能会导致问题。我在做git reset时也犹豫不决,因为每个人似乎都警告不要这样做,这可能会导致bitbucket上的pull请求出现问题。

2 个答案:

答案 0 :(得分:1)

你可以做任何一件事。确实没有决定性的技术原因可以决定你做什么。

  1. 在特殊情况下,可以更新非前进。向每个人解释,询问已拉出错误主人的团队,帮助他们恢复。

  2. 您可以转发development分支以恢复提交,然后转发revert the revert,从而返回其内容。

  3. 案例2的PS:

    原始案例

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

    您已将development合并到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包含以前不在master中的所有开发,可以在以后合并到master。虽然所有这些都表示为单一提交,但是有一些缺点,所以如果你的意思是指责,那将需要在e660100中再打一次。

答案 1 :(得分:0)

[由于我尚未获得足够的声誉,我无法对您的问题发表评论,因此请将我的评论添加为答案]

我知道恢复到master的旧哈希(没有显示合并提交然后反转提交)的唯一方法是force-push。有关示例和选项,请参阅git force-push

这是一个值得商榷的答案,因为有很多人反对它。但是当您使用bitbucket时,force-push可以被控制,即为您的操作启用它并为您的主机禁用force-push

注意:bitbucket最新插件rebasesquash使用--force-with-lease