git显示文件有修改,但是实际上却没有修改(提示File mode changed from 100755 to 100644)

Posted wodongx123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git显示文件有修改,但是实际上却没有修改(提示File mode changed from 100755 to 100644)相关的知识,希望对你有一定的参考价值。

主要原因是因为文件的权限被修改了

git config --global --add core.filemode false

这样就会忽略掉filemode的变更,下次commit的时候就会忽略这一点了。

但是这样做会带来一个问题,就是已经修改过的文件权限无法改回来了。

而我在开发的过程中就因为需要将其改回来而花了很多时间。

步骤如下:

  1. git config --global --add core.filemode true,先将其改回true
  2. 找到目标文件的地址,这里我就用app/src/java/com/example/MainActivity.java为例。(假设只有文件权限被改变)
  3. 将其回退到修改权限前的版本。
    git log ,查看commit日志,找到目标版本对应的hash
    git reset commitHash app/src/java/com/example/MainActivity.java,将版本改回来。
    如果没有执行第一步,这里会提示unstaged,表示没有更改成功
  4. git add .和git commit,将改回去的文件再提交一次commit,这样在和原文件合并的时候,就不会提示有差异了。
  5. git config --global --add core.filemode false,改回false。

如果你的项目中有多个这样只改动过权限的文件需要改回来,就把项目的版本回退,再将修改过后的代码贴回去:

  1. git config --global --add core.filemode true
  2. git branch -c test ,创建一个新分支,连带着项目的代码
  3. git log
    git reset --hard commitHash ,将整个版本回退
  4. git config --global --add core.filemode false,改回false。
  5. git merge test,合并分支,这样就会自动忽略只修改过filemode的文件了。

参考材料

https://stackoverflow.com/questions/1257592/how-do-i-remove-files-saying-old-mode-100755-new-mode-100644-from-unstaged-cha

以上是关于git显示文件有修改,但是实际上却没有修改(提示File mode changed from 100755 to 100644)的主要内容,如果未能解决你的问题,请参考以下文章

Git将未修改文件标记为已修改状态

git --- 修改和提交文件

git查看某个文件修改历史

git本地仓库 没有类似svn的显示

git无法提交,存在未提交的修改,在重新合并前或者撤销更改

centos 使用root登陆 却无法修改文件属性