【问题标题】:How to undo a merge on Bitbucket?如何撤消 Bitbucket 上的合并?
【发布时间】:2016-05-04 19:27:44
【问题描述】:

我创建了一个合并(到“主”分支),现在位于 Bitbucket 存储库中。长话短说:我需要撤消该合并。

我知道您可以在 Github 站点上执行此操作,但 Bitbucket 没有该功能。我不清楚如何用 Git 做到这一点而不会造成混乱。

【问题讨论】:

    标签: git bitbucket


    【解决方案1】:

    您需要先在本地系统上克隆存储库(您可以从 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
    

    如果 repo 是共享的,并且它的其他用户已经提取了您最近的提交并在其上构建,他们自然会不高兴。因此,在这种情况下,请务必通知所有人您正在做什么。

    revert,正如其他答案中提到的,是另一种选择;它会保留您所做的提交,但会进一步修改存储库(使用新提交),从而撤消您所做的更改。是否要使用 revert 取决于您是否希望提交中的信息保留在 repo 历史记录中。

    有关在 git 中撤消更改的更多详细信息,请参阅good tutorial page by Atlassian

    【讨论】:

    • 谢谢,这个解决方案也节省了我的时间
    • 关于使用git revert 撤消合并的重要说明(使用-m 选项):git revert --help 说:恢复合并提交声明您将永远 想要合并带来的树变化。因此,以后的合并只会引入由提交引入的树更改,这些提交是先前恢复的合并的祖先。这可能是也可能不是您想要的。 -> 所以如果reverting 合并需要撤消,解决方案不是再次合并先前合并(然后恢复)的分支,而是恢复恢复提交。
    • 这很奏效。
    【解决方案2】:

    2017 年在 Bitbucket 中实现了“恢复拉取请求”功能。

    要恢复拉取请求:

    1. 在拉取请求中,单击右上角的 Revert 按钮。 (可选)在 Revert pull request 对话框中,更改您要创建的新分支的分支名称。
    2. 单击还原按钮。 单击 Revert 后,Bitbucket 将创建新分支。即使您取消拉取请求,恢复分支仍保留在存储库中。
    3. “创建拉取请求”页面打开,其中还原分支作为源。添加审阅者并进行其他更改后,点击创建。

    来源:the docs

    【讨论】:

    • 我找不到还原选项。我猜这只能在 bitbucket 云中使用,而不是在 bitbucket 服务器中
    【解决方案3】:

    我建议改为使用revert,因为您正在恢复公共回购。

    git revert HEAD
    git push -f origin
    

    【讨论】:

    • 我喜欢这个概念,只是我不会在推送时使用-f。正如您所提到的,分支是公开的,所以如果有人刚刚提交了其他内容,强制推送将丢弃它们。定期推送应该可以完成这项工作,如果远程中已经有其他更改,推送将被拒绝,并让您有机会合并新的即将发生的更改。
    【解决方案4】:

    撤消提交的更改: git revert <commit id>

    【讨论】:

      【解决方案5】:

      首先,在您的本地机器上,在您合并到的分支上(例如master):

      git revert -m 1 HEAD

      或:

      git revert -m 1 <merge commit hash>

      然后推送到原点。

      或者,如果您不能直接推送到 master,请在还原之前先从 master 创建一个新分支,然后将这个新分支推送到 master 并创建一个新 PR,并在 bitbucket 上合并。

      【讨论】:

        猜你喜欢
        • 2021-05-01
        • 2017-08-09
        • 1970-01-01
        • 2011-03-10
        • 2011-03-26
        • 2010-12-26
        • 2011-12-21
        • 2018-01-23
        • 2011-08-10
        相关资源
        最近更新 更多