我知道有很多关于在git中撤消合并的信息,但我似乎无法就如何在我的特定情况下做到这一点找到任何共识。
有人通过bitbucket中的pull请求将我们的develop
分支合并到我们的master
分支。这只是今天发生的,所以它是在master分支上完成的最后一件事(我们不必担心在合并提交之上的其他提交)。
注意:我们自己托管bitbucket,所以我们有一个旧版本的bitbucket。没有恢复请求选项。
从我的阅读中,基本上有两种方法可以在git中处理它:
git reset --hard *<SHA of commit before the merge>*
develop
重做为master
git revert -m 1 *<SHA of the merge commit>*
develop
合并到master
(下一个版本),并且从我读过的内容中,我们必须记得还原在执行此操作之前我们的还原提交,因为否则当我们将develop
合并到master
时,我们今天还原的更改将不会包含在内。我真的不想让这个问题在6个月后成为一个问题,当时没有人记得这个还原。 TL; DR:我对git revert
犹豫不决,因为从那时起我们想要再次进行合并可能会导致问题。我在做git reset
时也犹豫不决,因为每个人似乎都警告不要这样做,这可能会导致bitbucket上的pull请求出现问题。
答案 0 :(得分:1)
你可以做任何一件事。确实没有决定性的技术原因可以决定你做什么。
在特殊情况下,可以更新非前进。向每个人解释,询问已拉出错误主人的团队,帮助他们恢复。
您可以转发development
分支以恢复提交,然后转发revert the revert,从而返回其内容。
案例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
最新插件rebase
和squash
使用--force-with-lease
。