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

相关推荐
香瓜子rd2 分钟前
MySQL InnoDB 并发控制核心原理:事务、隔离级别、MVCC 与锁机制
数据库·后端
RISCV_Explorer6 分钟前
RISC-V RVV向量编程模型机制解析——vsetvl配置、掩码与尾元素策略及长度无关编程
后端·risc-v
对象存储与RustFS13 分钟前
升级 RustFS 二进制不停机:一条一条换,留一条退路
后端·rust·开源
hasty17 分钟前
限制写了却没生效:OpenTelemetry Go 的 Unicode 截断边界
开发语言·后端·golang
SensorFlow3 小时前
看板有漏斗阶段,为什么转化率仍可能是假的?用 ClickHouse 检查演示埋点
后端
LucianaiB3 小时前
【TextIn xParse 与 Workbuddy实践】我把答辩材料丢给 AI 审了一遍,它开始追着我要证据
后端
王中阳Go3 小时前
读者问"你用的什么 Agent":3 个 AI 员工的分工表和工具链
人工智能·后端·ai编程
BadQiang3 小时前
Java 调用 Python 服务,报错后该从哪里查起?
后端
Hashan3 小时前
Vibe Coding 下前后端怎么对接接口?后端不给力的兜底方案
前端·后端·vibecoding
小蒜学长3 小时前
基于SpringBoot+Vue的小学数学智能出题系统(代码+数据库+LW)
java·数据库·spring boot·后端·智能出题系统