背景
在windows下编辑某个项目代码时,编辑到一半,需要切换到另一个分支,直接转换会提示当前工作区还有已修改的文件尚未commit,但是当前更改的内容尚未完整,所以还不想commit到仓库中。所以就使用了git stash save命令将当前工作区缓存后,才能切换到其他分支。
但是在checkout回到自己分支使用git stash apply时。发现不能将stash中的内容恢复,报错显示有文件已modified,即使使用girl restore xxx也没办法将文件的modified状态消除。文章来源地址https://www.toymoban.com/news/detail-761207.html
问题排查
- 首先,因为确认没有对文件做了什么修改,所以我一开始先直接使用
git restore
命令将文件恢复到上次提交的内容,但是发现没有什么用,文件还是处于modified状态git restore example/example.py
- 接着,我使用
git diff --summary
对比modified文件到底发生了什么变化
根据提示,发现是文件的权限发生了改变,参考中的方式,在git bash中运行了以下命令,但是没起作用,不知道是不是因为是系统是windows的原因$ git diff --summary mode change 100755 => 100644 example/example.py
git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod +x
- 最后,通过
git config --list
才发现,config中有一条filemode配置项,该配置项被设置为了true
状态
修改该配置项的值为$ git config --list ... core.filemode=true ...
false
, 文件的modified状态消失了。
这样设置作用范围仅针对当前工作区,如果想要全局生效,则需要添加git config core.filemode false
--global
选项git config --global core.filemode false
总结
- 先用
git diff --summary
查看文件具体发生了什么改变 - 这里是checkout切换后文件权限发生了变化导致的,需要修改git的配置文件,需要设置将文件权限检测功能关闭,即
git config core.filemode false
;如果需要全局生效,则git config --global core.filemode false
- 其他类似的,因文件名发生改变导致的需要配置
git config core.filename false
; 因LF/CRLF原因导致的需要配置git config core.autocrlf false
参考
文章来源:https://www.toymoban.com/news/detail-761207.html
到了这里,关于文件没有更改,但git status显示modified的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!