我已经在Bitbucket回购中创建了一个合并(进入'master'分支)。长话短说:我需要撤消合并。
我知道你可以在Github网站上做到这一点,但Bitbucket没有这个功能。我不清楚如何使用Git做这件事而不会造成混乱。
答案 0 :(得分:53)
您需要首先克隆本地系统上的存储库(您可以从Bitbucket中存储库的" Overview"页面获取SSH或HTTPS格式的repo URL):
git clone git@bitbucket.org:my/repo.git
-or-
git clone https://my@bitbucket.org/my/repo.git
git checkout master
..然后恢复最近的提交。首先列出可用的提交:
git log
..然后在合并之前选择提交:
git reset --hard 72ead1c4c1778c23c277c4f15bbb68f3bb205f54
..其中哈希是合并之前提交的哈希值(来自日志)。最后,强制将更改推回到Bitbucket,覆盖历史。
git push -f
当然,如果回购是共享的,并且其他用户已经撤回了您最近的提交并在其上构建,那么他们将不会感到高兴。因此,在这种情况下,请务必通知所有人您正在做的事情。
revert
,如其他答案所述,是另一种选择;它会保留您所做的提交,但会进一步修改存储库(使用新的提交),以便撤消您所做的更改。是否要使用revert
取决于您是否希望提交中的信息保留在回购历史记录中。
有关撤消git更改的更多详细信息,请参阅good tutorial page by Atlassian。
答案 1 :(得分:7)
2017年,Bitbucket实施了“还原拉取请求”功能。
要还原拉取请求:
来源:the docs。
答案 2 :(得分:5)
我建议改为revert
,因为你正在恢复公共回购。
git revert HEAD
git push -f origin
答案 3 :(得分:4)
撤消提交的更改:
git revert <commit id>
答案 4 :(得分:1)
首先,在您的本地机器上,在您合并到的分支上(例如 master
):
git revert -m 1 HEAD
或:
git revert -m 1 <merge commit hash>
然后推送到原点。
或者,如果您不能直接推送到 master,请在恢复之前先从 master 上创建一个新分支,然后使用这个新分支推送并创建一个新的 PR 并针对 master 并在 bitbucket 上合并。