我已经在Bitbucket仓库中创建了一个合并请求(合并到'master'分支),现在需要撤销该合并操作。
我知道你可以在Github网站上做到这一点,但是Bitbucket没有这个功能。我不确定如何在Git中完成这个操作而不会引起混乱。
您需要先将存储库克隆到本地系统(您可以从Bitbucket存储库的“概述”页面获取SSH或HTTPS格式的存储库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 中撤消更改的详细信息,请参阅 Atlassian 的优秀教程页面。
Bitbucket在2017年实现了“还原拉取请求”功能。
要还原拉取请求:
来源:文档。
我建议使用revert
命令,因为你正在回滚一个公共仓库。
git revert HEAD
git push -f origin
git revert <commit id>
首先,在您的本地机器上,在您合并的分支上(如master
)执行以下命令:
git revert -m 1 HEAD
或者:
git revert -m 1 <merge commit hash>
然后将更改推送到 origin。
或者,如果您不能直接推送到 master,请先从 master 创建一个新分支进行还原,然后将其推送,并使用此新分支对 master 创建新的 PR,在 bitbucket 上合并。
git revert
撤销合并(使用-m
选项)的重要提示:git revert --help
表示:撤销合并提交意味着您将永远不会想要合并带来的树更改。因此,后续的合并只会带来之前撤销合并的祖先提交中未引入的树更改。这可能是您想要的,也可能不是。 -> 因此,如果需要撤销“revert”合并,则解决方案不是再次合并先前合并(然后撤销),而是撤销撤销提交。 - balu