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

Git中执行git reset --merge后如何完成合并撤销?

解决Git合并撤销后的远程同步问题

首先得对应自己的实际情况,分两种核心场景来处理:

场景1:合并后的master还没推送到远程

如果之前你只是在本地完成了合并操作,还没执行过git push origin master把合并后的master推到服务器,那事情特别简单——完全不需要再做任何推送操作。因为远程服务器上的master分支本来就还是合并前的状态,你本地的git reset --merge只是把自己的副本回退到和远程一致的版本而已,直接继续开发就行。

场景2:合并后的master已经推送到远程了

这时候情况要复杂一些,因为远程服务器上已经存在那个你想撤销的合并提交了。你本地用git reset --merge回退后,本地的master分支提交历史已经和远程不一致,普通的git push会被Git拒绝(它默认会阻止你覆盖远程的提交历史)。

这时候再细分两种子情况操作:

  • 个人仓库/无人拉取过该合并版本:可以直接强制推送覆盖远程历史,执行命令:
    git push --force origin master
    
    这个命令会让远程的master分支直接回退到你本地reset后的状态,完成服务器端的合并撤销。
  • 多人协作仓库/已有同事拉取过该合并版本:强制推送会给团队其他人带来麻烦——他们本地的master分支会和远程产生冲突,甚至丢失未同步的修改。这时候更稳妥的处理方式是:
    1. 先和团队成员沟通,告知大家你要撤销这次合并,让大家暂时不要基于那个合并版本开发;
    2. 执行上面的强制推送命令;
    3. 让同事们先执行git fetch origin拉取远程最新状态,再用git reset --hard origin/master把本地master同步到远程的最新版本。

额外提醒

你选择用git reset --merge是个很稳妥的决定,它会保留你本地未提交的修改,不像git reset --hard会直接清空未提交的变更。不过如果是多人协作的公共分支,除非万不得已,其实更推荐用git revert生成一个新的撤销提交(而非修改历史),这样不会影响其他协作的人——不过既然你已经用了reset,按上面的步骤处理就没问题。

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

火山引擎 最新活动