You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何撤销Git分支合并操作?含已推送到远程仓库的场景解决方案

Hey there! 咱们一步步来解决你的两个Git撤销合并的问题——这些都是很常见的场景,我会给你讲得明明白白的。

问题1:将分支合并到master后,如何撤销这次合并操作?

具体操作要看你有没有把合并后的master推送到远程仓库:

场景1:还没推送到远程仓库

如果还没执行git push,有两个简单的办法:

  • 刚合并完还没做其他操作?直接用git merge --abort:这个命令会立刻撤销合并,把master分支恢复到合并前的状态,省心又快捷。
  • 合并后又做了其他提交?重置到合并前的状态
    1. 先运行git log --oneline找到合并前master最后一个提交的哈希值。
    2. 然后执行硬重置:git reset --hard <合并前提交的哈希>

    注意:--hard参数会丢弃合并后所有未提交的本地修改,如果你有未保存的工作,一定要先备份!

场景2:已经推送到远程仓库

如果已经把合并后的master推到了远程,这时候需要改写远程的提交历史(操作前一定要和团队成员沟通好!):

  1. 先把本地master重置到合并前的状态:git reset --hard <合并前提交的哈希>
  2. 用安全强制推送到远程:git push origin master --force-with-lease

    为什么用--force-with-lease而不是普通的--force?它会先检查远程分支有没有你不知道的新提交,能避免不小心覆盖别人的工作,更安全。

  3. **重点:通知你的团队!**所有在master分支上工作的成员都需要重置他们的本地分支来同步远程的新状态。
问题2:已推送master到origin/master,要取消localdevelopment的合并,仅保留蓝色提交

根据你的描述,你需要把master彻底恢复到那个蓝色圆点对应的提交状态(也就是合并localdevelopment之前的状态),步骤如下:

  • 定位蓝色提交的哈希值:运行git log --oneline查看提交历史,找到蓝色圆点对应的短哈希(比如a1b2c3)。如果这个提交是合并记录的父节点,也可以用合并记录的哈希加上^来定位(比如合并记录哈希是d4e5f6,就用d4e5f6^)。
  • 本地重置到目标提交:执行命令git reset --hard <蓝色提交的哈希>,这会让本地master完全回到蓝色提交的状态,合并进来的所有localdevelopment提交都会被移除。
  • 安全强制推送远程:用git push origin master --force-with-lease推送到远程仓库。这个命令比直接--force更安全,防止误覆盖他人的修改。
  • 同步团队成员的本地分支一定要通知所有团队成员,因为你改写了远程master的提交历史,他们需要做以下操作来同步:
    1. 先备份自己的未提交工作(如果有的话)
    2. 执行git fetch origin拉取最新的远程状态
    3. 重置本地master分支:git reset --hard origin/master

小提醒:如果远程仓库设置了分支保护(比如GitHub的保护分支功能),你需要先获取强制推送的权限或者暂时关闭保护才能执行上述操作。

内容的提问来源于stack exchange,提问作者Prashant Joshi

火山引擎 最新活动