Menu
CoddyTech

Git:取消合并

最后更新

如果 git merge 遇到冲突,而你宁愿退出也不想解决,git merge --abort 会取消这次合并,把你的分支恢复到开始合并之前的状态,一点不差。合并出了岔子时,这是最干净的退路。

已经完成的合并要用别的方法撤销,见下文。在终端在线编辑器中试试这些命令:浏览器里就有一个真正的 shell。

git merge --abort 取消有冲突的合并,让分支回到合并开始之前的状态。

语法

命令作用
git merge --abort取消有冲突的合并,恢复到合并前的状态
git reset --merge较早的等效写法:中止并重置合并
git merge --quit退出合并,但工作区保持原样

撤销已经完成的合并

这和取消合并不同:合并提交已经存在了。

情况命令
合并只在本地,尚未推送git reset --hard ORIG_HEAD
合并已经推送git revert -m 1 <merge-hash>

Git 取消合并常见问题

如何取消正在进行的合并?
运行 git merge --abort。如果合并因为冲突停了下来,而你不想解决这些冲突,这条命令会取消整个操作,把分支和工作区恢复到合并开始之前的样子。
git merge --abort 和 git reset --merge 有什么区别?
两者做的事情基本相同:取消正在进行的合并,恢复到合并前的状态。git merge --abort 是专门为此设计的新命令;git reset --merge 是较早的写法,现在依然可用。为了清晰起见,优先使用 git merge --abort。
如何撤销已经完成的合并?
这就不是取消合并了,因为合并提交已经存在。如果合并只在本地,git reset --hard ORIG_HEAD 会把分支移回合并之前的位置,在快进合并之后也同样有效,而 HEAD~1 在这种情况下就不行。它会丢弃未提交的工作,所以先用 git status 检查一下。如果你已经推送了合并,用 git revert -m 1 <merge-hash> 来撤销它,这样不会改写共享的历史。
取消合并会丢失我的其他更改吗?
git merge --abort 会恢复到合并之前那一刻的状态,所以合并带来的更改会被丢弃,但你已经提交的工作完好无损。如果在开始合并之前你还有未提交的更改,请先提交或用 stash 储藏起来,因为取消合并恢复的是合并前的提交状态。
可以在线练习吗?
可以。打开终端在线编辑器,就能在浏览器里真正的 shell 中运行 git merge --abort,无需安装任何东西。Coddy 免费的互动式 Git 课程也会一步步讲解合并和解决冲突。
Coddy 编程语言插图

在 Coddy 学习 Git

开始