当前位置:   article > 正文

文件没有更改,但git status显示modified_本地没修改 但git提交时显示

本地没修改 但git提交时显示

背景

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

问题排查

  • 首先,因为确认没有对文件做了什么修改,所以我一开始先直接使用git restore命令将文件恢复到上次提交的内容,但是发现没有什么用,文件还是处于modified状态
    git restore example/example.py
    
    • 1
  • 接着,我使用git diff --summary对比modified文件到底发生了什么变化
    $ git  diff --summary
    mode change 100755 => 100644 example/example.py
    
    • 1
    • 2
    根据提示,发现是文件的权限发生了改变,参考中的方式,在git bash中运行了以下命令,但是没起作用,不知道是不是因为是系统是windows的原因
    git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod +x
    
    • 1
  • 最后,通过git config --list才发现,config中有一条filemode配置项,该配置项被设置为了true状态
    $ git config --list
    ...
    core.filemode=true
    ...
    
    • 1
    • 2
    • 3
    • 4
    修改该配置项的值为false, 文件的modified状态消失了。
    git config core.filemode false
    
    • 1
    这样设置作用范围仅针对当前工作区,如果想要全局生效,则需要添加--global选项
    git config --global core.filemode false
    
    • 1

总结

  • 先用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

参考

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/171218
推荐阅读
相关标签
  

闽ICP备14008679号