如何暂存含冲突的Git合并且不丢失冲突状态?
处理Git合并冲突时的分支切换方案
一、正确暂存未完成的合并冲突
别用普通的git stash,它会破坏Git对冲突的识别状态。要用专门的合并暂存命令:
- 暂存当前冲突状态:
git stash push --include-untracked -m "WIP 合并冲突未完成"
这个命令会完整保留Git的合并冲突上下文,不是把冲突文件当成普通修改存起来。 - 恢复暂存的合并:
git stash pop
执行后Git会立刻重新识别冲突状态,直接接着之前的进度解决就行。
二、用git worktree彻底隔离工作环境
如果经常需要在不同分支间切换,git worktree是更省心的选择——相当于给仓库开个独立“分身”:
- 新建关联目标分支的工作目录:
git worktree add ../临时工作目录 <要切换的分支名>
这个新目录和原仓库完全独立,你在里面改代码、提交都不会影响原仓库的合并冲突状态。 - 搞定其他分支的工作后,直接切回原仓库继续解决冲突即可,无需额外恢复操作。
- 用完临时目录后,删除它:
git worktree remove ../临时工作目录
三、已用普通stash导致状态丢失的补救办法
要是已经用了普通git stash,恢复后Git不认冲突了,试试这两步:
- 确认在原来的合并分支上,执行:
git merge --continue
Git会扫描文件里的冲突标记,重新进入合并冲突状态。 - 如果上面的命令没用,可尝试强制重置到合并冲突的初始状态:
git reset --merge
注意:这个操作会丢掉你已经解决的冲突进度,只有万不得已再用。
内容的提问来源于stack exchange,提问作者Ville Miekk-oja
相关产品推荐
相关产品推荐

