Git-stash产生的冲突

场景简介

环境:Windows 10,Git 2.45.1,分支 dev 操作:在干净工作区上执行 git stash pop,试图恢复之前保存的改动。

问题现象

git stash pop 之后,文件 app/Services/Demo.php出现冲突,git status 显示为:

sql 复制代码
Unmerged paths:
       both modified: app/Services/Demo.php

在 SourceTree 中,这个文件同时出现在「已暂存」和「未暂存」区域。 尝试用 git restore 放弃修改,报错:

lua 复制代码
error: path 'xxx' is unmerged

原因分析:什么是 Unmerged paths?

git stash pop 本质是一次 三方合并(当前 HEAD + 当前工作区 + stash 内容)。 合并时这个文件发生冲突,Git 在索引中为它保存了多份版本(base/ours/theirs),标记为 未合并(unmerged)。 在这种状态下,很多命令(包括 git restore)会拒绝操作,防止破坏合并过程,所以会提示 path 'xxx' is unmerged。

最终解决方案

需求:完全放弃这次 stash pop 带来的所有改动,恢复到 pop 前的干净状态,且确认没有其他需要保留的本地修改。执行步骤:

perl 复制代码
# 1. 丢弃所有本地未提交修改(包括冲突)
git reset --hard HEAD
# 2. 确认工作区干净
git status  # 显示 working tree clean
# 3. 同步远程最新提交
git pull

结果:

冲突文件恢复为 HEAD 版本,不再是 Unmerged paths。 工作区与暂存区都干净,只多了远程新拉下来的正常变更。 这次 stash pop 的所有本地影响被彻底清除。

经验总结

stash pop 会触发合并冲突,出现 Unmerged paths 非常正常。 看到 Unmerged paths 时,要意识到:当前还处在一次「未完成的合并过程」。 如果确认当前所有未提交改动都可以丢弃,一键回到干净状态的最简单办法就是: git reset --hard HEAD 操作前务必用 git status / git diff 确认:真的没有其他想保留的本地修改。

清理掉贮藏区 git stash clear

相关推荐
XinZong2 小时前
OpenClaw 中最经典的 6 款skill,真正能进工作流的 skills
javascript·后端
zhangxingchao2 小时前
AI Agent 基础问题系统整理:从 LangChain、LangGraph、MCP 到 Agent 架构、记忆、工具调用与评估体系
前端·人工智能·后端
Moment2 小时前
AI 为什么总喜欢写防御性代码?
前端·后端·面试
IT_陈寒2 小时前
SpringBoot自动配置的坑,差点让我加班到天亮
前端·人工智能·后端
LucianaiB3 小时前
【Dify + EdgeOne】你奶奶也会做一个“智票通”,轻松票据自定义提取+防数据泄露
前端·后端
程序员老邢3 小时前
【技术底稿 37】Spring Boot 3.x 自动装配 “死锁” 排查:3 个注解实现条件化装配与 Mock 兜底
java·spring boot·后端·自动装配·rag·技术底稿
用户434309241693 小时前
Day29:图片上传 + 存数据库(Multer + MySQL)
数据库·后端
码路高手3 小时前
Hermes Agent 整体了解
后端·架构
日月云棠3 小时前
JAVA数据结构与算法 - 基础:链表
java·后端
日月云棠3 小时前
JAVA数据结构与算法 - 基础:栈 (Stack) 深度解析
java·后端