必须先执行 git merge --abort 清理合并状态,再 git status 确认干净,最后重新 git merge ;若已错误提交则需 git reset --hard head~1 后重试。

git merge 失败后怎么重试合并
直接删掉冲突标记、git add、git commit完事?不行。如果合并中途出错(比如误操作、漏改文件、git commit前忘 git add),后续再想“重新来一次”不能靠硬刷新或重跑命令——Git 已经创建了部分合并状态,必须先清理干净才能安全重试。
为什么不能直接再执行 git merge
因为 Git 在第一次 git merge 触发冲突后,已经:
- 把待合并分支的提交信息记入 .git/MERGE_HEAD;
- 把冲突文件的三路合并状态写进索引(index),即使你手动删了 也还在“未解决”状态;
- 如果此时再跑一遍 <code>git merge,Git 会报 Already up to date 或 fatal: You have not concluded your merge (MERGE_HEAD exists)。
正确清理并重试的三步操作
执行以下命令顺序,不跳步:
-
git merge --abort:这是最干净的方式,它会自动还原工作区和暂存区到合并前状态,同时删掉.git/MERGE_HEAD和相关元数据; - 确认清理完成:
git status应该显示 “nothing to commit, working tree clean”; - 重新执行合并:
git merge <branch-name></branch-name>,比如git merge feature/login。
注意:git merge --abort 只在合并进行中(即有 MERGE_HEAD)时有效;如果已手动 git commit 了错误的合并提交,就得用 git reset --hard HEAD~1 回退,再走上面流程。
容易被忽略的边界情况
有些场景下 git merge --abort 会失败,比如:
- 工作区有未跟踪文件或未
git add的修改 —— 先git clean -fd+git checkout -- .清理; - 你用了
git merge --no-commit但没git commit,又手动改过文件 ——--abort仍可用,但改过的文件会被强制还原; - 你在 IDE 里点“解决冲突”但没点“标记为已解决”,文件仍处于 conflicted 状态 ——
git status会列出它们,必须先git add或git checkout -- <file></file>才能--abort。
真正麻烦的不是冲突本身,而是你以为“改完保存就完了”,却忘了 Git 还卡在合并上下文里。每次 git merge 后,第一反应不该是写代码,而是看一眼 git status 输出里有没有 “all conflicts fixed but you are still merging”。











