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

你可能感兴趣的:(实际问题)