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

问题描述:

我知道有很多关于在git中撤销合并的信息,但我似乎无法在我的具体情况中找到任何有关如何执行此操作的共识。撤消由bitbucket请求创建的git合并

有人本质经由到位桶拉入请求合并我们develop分公司我们master分支。这只是今天发生的,所以这是在master分支上完成的最后一件事(我们不必担心在合并提交之上的其他提交)。

注:我们举办到位桶自己,所以我们必须到位桶的旧版本。没有回复拉动请求选项。

从我读过,有本质上的混帐处理这两种方式:

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

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

    • 这将创建一个新的提交是撤消由合并所行一切的变化
    • 这将是罚款,但我们打算在以后的合并developmaster日期(下一版本)以及我读过的内容,我们必须记得在执行此操作之前恢复我们的恢复提交,否则当我们将develop合并到master时,我们今天还原的更改将不会包含在内。 6个月后,我真的不想让这个问题成为问题,当时没有人记得这个回复。

TL; DR:我对由于这些问题做git revert犹豫可能会导致从现在6个月当我们想再次做合并。我也在做git reset犹豫不决,因为每个人都似乎警告不要这样做,并且它可能会导致与bitbucket上的pull请求有关的问题。

你也可以做。真的没有决定性的技术原因会决定你该怎么做。

  1. 在特殊情况下,它是确定以更新非正向。向每个人解释,问问拉错了主人的团队,帮助他们恢复。

  2. 您可以转发development分支恢复提交,然后revert the revert,并返回到它的内容。

PS的情况下2:

对于原来如此

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

您将合并成developmentmaster,并恢复它。

* 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之后再拨打一个电话。

+0

你能否详细说明2号?我没有关注。特别是与您使用“前进”。你是否说有一种方法可以改变'develop',以便在6个月内从'develop'到'master'合并时考虑到恢复? –

+0

添加图例 – max630

+0

感谢您的详细解答。我一定会将这标记为公认的答案,但还有一件事情。我们不能做从主人到开发人员的快速合并,因为我们在主人身上进行了还原,因此还有其他发展承诺。这会改变什么吗?我还可以通过开发合并提交而不是快进合并来完成此任务吗? –

[由于我还没有得到足够的声誉,我不能把评论你的问题,所以加入我的答案评论]

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

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

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

+0

感谢您的回答,但我认为您误解了我的要求。我知道如果我使用'git reset --hard',我必须强制推动,但是我的问题是最好是这样做,还是应该'git revert'来代替,这不会重写历史,因此不会造成推动力。重读我的问题,了解为什么我对使用这两种方法犹豫不决。 –

+0

'git reset'和'force push'会重写历史记录,所以人们建议不要使用它,但如果你有控制权(bitbucket提供),那么它可以用于这种情况。 正如我所看到的没有任何建议给出你正在寻找的确切答案,所以我可能会建议你创建一个虚拟文件库和分支的虚拟库?重现上面的情况,看看哪种解决方案适合你。通过这种方式,你可以安全地尝试很多东西而不会打扰你的主人。 – RuSh