0


文件没有更改,但git status显示modified

背景

在windows下编辑某个项目代码时,编辑到一半,需要切换到另一个分支,直接转换会提示当前工作区还有已修改的文件尚未commit,但是当前更改的内容尚未完整,所以还不想commit到仓库中。所以就使用了git stash save命令将当前工作区缓存后,才能切换到其他分支。
但是在checkout回到自己分支使用git stash apply时。发现不能将stash中的内容恢复,报错显示有文件已modified,即使使用girl restore xxx也没办法将文件的modified状态消除。

问题排查

  • 首先,因为确认没有对文件做了什么修改,所以我一开始先直接使用git restore命令将文件恢复到上次提交的内容,但是发现没有什么用,文件还是处于modified状态git restore example/example.py
  • 接着,我使用git diff --summary对比modified文件到底发生了什么变化$ gitdiff--summarymode change 100755=>100644 example/example.py 根据提示,发现是文件的权限发生了改变,参考中的方式,在git bash中运行了以下命令,但是没起作用,不知道是不是因为是系统是windows的原因gitdiff--summary|grep--color'mode change 100755 => 100644'|cut -d' ' -f7- |tr'\n''\0'|xargs-0chmod +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

参考

标签: git

本文转载自: https://blog.csdn.net/Lekaor/article/details/132804005
版权归原作者 www.balabala.com 所有, 如有侵权,请联系我们删除。

“文件没有更改,但git status显示modified”的评论:

还没有评论