如何从Git中的暂时更改中删除“旧模式100755新模式100644”的文件?

出于某种原因,当我最初从仓库中为我的一个git项目拉出来的时候,我的工作拷贝中有大量的文件没有对它们做出明显的改变,而是一直显示在我unstaged changes区域。

我在Windows XP上使用Git Gui,当我去看文件,看看有什么变化。 我所看到的是:

 old mode 100755 new mode 100644 

有谁知道这是什么意思?

我怎样才能将这些文件从未分离的更改列表中取出? (非常烦人,必须通过100个文件,只是挑出我最近编辑的文件,并希望提交)。

对于我来说,这看起来像unix文件许可模式( 755 = rwxr-xr-x644 = rw-r--r-- ) – 旧模式包含+ x(可执行)标志,新模式没有。

这msysgit问题的答复build议将core.filemode设置为false以摆脱该问题:

 git config core.filemode false 

将core.filemode设置为false是行不通的。 但是你要确保〜/ .gitconfig中的设置不会被.git / config中的设置覆盖。

你可以试试git reset –hard HEAD将repo重置为预期的默认状态。

看来你已经改变了目录的一些权限。 我做了以下步骤来恢复它。

 $ git diff > backup-diff.txt ### in case you have some other code changes $ git checkout . 

我只有一个更改权限的麻烦文件。 为了单独回滚,我只是用rm <file>手动删除它,然后做了一个结帐来取出新的副本。

幸运的是我还没有上演呢。

如果我有我可以在运行git checkout -- <file>之前运行git checkout -- <file> git reset -- <file> git checkout -- <file>

发生这种情况时,您可以在远程存储库中执行所有文件。 使它们再次可执行将使所有事情恢复正常。

 chmod +x <yourfile> //For one file chmod +x folder/* // For files in a folder 

您可能需要执行以下操作:

 chmod -x <file> // Removes execute bit 

相反,对于没有设置为可执行文件并且由于上述操作而被更改的文件。 有一个更好的方法来做到这一点,但这只是一个非常快速和肮脏的修复。

从旧硬盘复制工作文件的git repo时遇到过这个问题。 问题源于事实,所有者和权限从旧的驱动器/机器更改为新的驱动器/机器。 总而言之,运行以下命令来解决问题( 感谢这个超级用户的回答 ):

 sudo chmod -R -x . # remove the executable bit from all files 

前者的命令实际上可以解决git diff报告的不同之处,但会撤销你列出目录的能力,所以ls ./失败, ls: .: Permission denied 。 要解决这个问题:

 sudo chmod -R +X . # add the executable bit only for directories 

坏消息是,如果你有任何想要保持可执行文件,如.sh脚本,你需要恢复这些文件。 您可以使用以下命令为每个文件执行此操作:

 chmod +x ./build.sh # where build.sh is the file you want to make executable again