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

相关推荐
烛之武3 小时前
SpringBoot基础
java·spring boot·后端
橙序员小站3 小时前
Harness Engineering:从 OpenClaw 看 AI 助理的基础设施建设
后端·aigc·openai
小陈工3 小时前
2026年3月28日技术资讯洞察:5G-A边缘计算落地、低延迟AI推理革命与工业智造新范式
开发语言·人工智能·后端·python·5g·安全·边缘计算
azhou的代码园4 小时前
基于SpringBoot+微信小程序的图片识别科普系统
spring boot·后端·微信小程序
Tony Bai5 小时前
Rust 看了流泪,AI 看了沉默:扒开 Go 泛型最让你抓狂的“残疾”类型推断
开发语言·人工智能·后端·golang·rust
用户3167361303425 小时前
javaLangchain4j从官方文档入手,看他做了什么——具体使用(二)
后端
無名路人5 小时前
Zsh 脚本 + VS Code 任务:NestJS + Vue3 一键部署到 1Panel
运维·后端·自动化运维
ybwycx5 小时前
springboot之集成Elasticsearch
spring boot·后端·elasticsearch
程途知微6 小时前
AQS 同步器——Java 并发框架的核心底座全解析
java·后端
iPadiPhone7 小时前
分布式架构的“润滑剂”:RabbitMQ 核心原理与大厂面试避坑指南
分布式·后端·面试·架构·rabbitmq