You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git stash后修改文件仍出现在未暂存区的问题求助

Git Stash 后文件仍留在未暂存区的问题排查

问题场景

在Windows10系统、Git版本2.37.0、SourceTree 3.4.10环境下,执行git stash操作(未勾选「保留暂存修改」选项)后,已标记为修改的文件仍出现在未暂存区域,命令行操作过程如下:

$ git status  
Changes not staged for commit:
     modified: myfile.cpp
$ git stash  
$ git status  
Changes not staged for commit:
     modified: myfile.cpp
$ 

原本预期会被暂存的文件,始终留在未暂存列表中。

补充说明:通过SourceTree调用p4merge对比时,显示内容为:0处差异(识别换行符与空白字符差异),制表符间距:4,编码:UTF8,无BOM

原因分析

核心原因是文件仅存在换行符或空白字符的差异,Git将其识别为文件修改,但实际业务内容无变化。这种情况常见于Windows系统下的换行符(CRLF)与Git仓库配置的换行符(LF)不匹配,导致Git每次拉取或操作后自动转换换行符,进而标记文件为已修改。

解决步骤

  • 检查当前Git的换行符配置:
    git config --get core.autocrlf
    
    Windows系统下默认值为true,若配置异常,可重置为:
    git config --global core.autocrlf true
    
  • 确认文件实际差异:
    忽略空白字符查看差异,验证是否仅为格式问题:
    git diff -w myfile.cpp
    
  • 重置文件状态:
    若确认无需保留格式修改,直接重置文件到HEAD状态:
    git reset --hard HEAD
    
    之后再执行git stash即可正常暂存。
  • 调整空白字符检测规则:
    若需要保留换行符格式,可让Git忽略行尾回车符差异:
    git config core.whitespace cr-at-eol
    

内容的提问来源于stack exchange,提问作者DDS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:01:21