在 Git 中,撤销(回退)merge 操作有多种方法

[复制链接]
发表于 2025-6-1 03:06:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在 Git 中,撤销(回退)merge 操作有多种方法,具体取决于是否已提交、是否已推送,以及是否必要保留历史记录。以下是几种常见的撤销 merge 的方法:

1. 未提交 merge(未 commit)

假如 merge 后还未提交,可以利用以下方法撤销:
  1. git merge --abort
复制代码


  • 这会终止当前的合并操作,并规复到合并前的状态。
  • 适用于合并过程中出现辩论,但还未 git commit 的情况。

2. 已提交 merge,但未推送

假如 merge 已提交但未推送到远程仓库,可以利用 git reset 回退:
  1. git reset --hard HEAD~1
复制代码


  • HEAD~1 表示回退到上一个提交(即 merge 之前的状态)。
  • 利用 --hard 会丢弃所有未提交的更改,慎用。

3. 已推送 merge

假如 merge 已推送到远程仓库,可以利用 git revert 生成一个反向提交:
  1. git revert -m 1 <merge-commit-id>
复制代码


  • -m 1 表示保留主分支的更改(即撤销合并分支的更改)。
  • 这会创建一个新的提交,撤销 merge 的更改,但保留历史记录。

4. 利用 git reflog 找回历史记录

假如误操作导致丢失提交,可以利用 git reflog 查看操作历史,并规复:
  1. git reflog  # 查看操作日志日志
  2. git reset --hard <commit-id>  # 恢复到指定提交
复制代码


  • 适用于误操作后必要找回 merge 前的状态。

5. 逼迫回退远程分支(慎用)

假如 merge 已推送,且必要彻底删除合并记录(会修改历史):
  1. git reset --hard <commit-before-merge>
  2. git push --force origin <branch-name>
复制代码


  • 留意:这会覆盖远程分支,可能导致其他协作者的代码丢失,需谨慎利用。

6. 撤销 revert(重新合并)

假如之前用 git revert 撤销了 merge,但后续必要重新合并:
  1. git revert <revert-commit-id>  # 撤销之前的 revert
  2. git merge <branch-name>        # 重新合并
复制代码


  • 适用于必要规复被撤销的合并操作。

总结

场景方法适用情况未提交 mergegit merge --abort
合并辩论未提交已提交未推送git reset --hard HEAD~1
本地回退已推送git revert -m 1 <commit-id>保留历史记录逼迫回退git reset --hard + git push --force彻底删除合并记录规复误操作git reflog + git reset找回丢失的提交 留意事项:


  • 利用 --force 推送前,确保团队其他成员知晓,制止代码辩论。
  • git revert 适用于必要保留历史的场景,而 git reset 适用于彻底回退。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表