合并冲突后如何中止这次 merge

中止合并用 git merge --abort,仓库回到合并前的状态,冲突标记与暂存全部丢弃。rebase 对应的命令是 git rebase --abort。中止后可换个思路(换策略/分批合)再来。

最佳实践
Git 分支协作与合并示意

git merge --abort 一条命令回到合并前的状态:冲突标记清除、暂存区还原、分支指针不动,就像这次 merge 没发生过。rebase 过程中想退出则用 git rebase --abort。

典型流程

git merge feature-x
# 冲突一堆,先不玩了
git merge --abort
git status        # 确认干净

中止之后再怎么合

中止只是"退出这次尝试",分歧还在。可选策略:

# 1. 用 ours/theirs 策略整体偏向一边
git merge -X theirs feature-x     # 冲突处采用对方的改动

# 2. 先 rebase 自己再合,减少冲突面
git rebase main                   # 在 feature 分支上执行

# 3. 改用图形化工具处理大冲突
git merge feature-x
git mergetool                     # 调起 vimdiff/VS Code 等

如果 --abort 报错

git merge --abort 仅在"正在进行 merge"时有效。已经 git commit 完成了合并?那就不是中止而是撤销:

git reset --hard ORIG_HEAD    # 回到合并前的提交(合并刚完成时)
# 已推送的合并用 revert
git revert -m 1 <合并提交哈希>

常见问题(FAQ)

Q:--abort 会丢我合并前的工作区改动吗?

merge 开始前 Git 就要求工作区基本干净(有冲突风险的未提交改动会直接拒绝 merge)。--abort 只还原 merge 产生的变化。但养成 merge 前 commit 或 stash 的习惯总是更安全。

Q:cherry-pick / revert 冲突了怎么中止?

对应的 git cherry-pick --abort、git revert --abort,语义相同。

Q:怎么避免每次都大面积冲突?

分支生命周期别拉太长,勤做同步(定期 merge/rebase main);大重构拆小步走;目录级冲突(如格式化整库)团队约定专门窗口期做。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台