以下是命令行的一些相关输出(poshgit显示状态):
[Branch1]> git checkout Branch2
Switched to branch 'Branch2'
[Branch2 +0 ~3 -0]>
[Branch2 +0 ~3 -0]> git diff --ignore-space-at-eol
[Branch2 +0 ~3 -0]> git checkout .
[Branch2 +0 ~3 -0]>
我尝试了this question
中建议的解决方案[Branch2 +0 ~3 -0]> git reset --hard
HEAD is now at c8be749 some comment
[Branch2 +0 ~3 -0]> git reset HEAD
Unstaged another commit:
M Src/somefile
M Src/someotherfile.cs
M Src/athirdfile.cs
[Branch2 +0 ~3 -0]>
这是如何发生的,除了提交更改之外,我如何解决它,因为我似乎无法撤消差异。即使藏匿什么都不做。
我们非常感谢有关我们如何陷入困境以及如何摆脱困境的一些建议。
我现在已经能够可靠地重现这一点,所以我能够获得更明确的答案。如果我刚刚克隆了我的回购,然后切换到分支然后回到主人我得到一些文件,说他们有变化。我尝试过使用core.autocrlf的设置,但这似乎只是改变了受影响的文件数量,并没有完全解决问题。
我可以做些什么来尝试解决这个日益恼人的问题?
答案 0 :(得分:5)
您没有提到您使用的操作系统,您的远程仓库使用的操作系统(如果有)或您的团队是否与其他操作系统跨平台工作。这种信息可能有助于诊断问题。
由于以下原因,我发现这些问题突然出现:
行结尾(Windows vs Mac vs Linux)
使用core。* crlf设置和.gitattributes文件修复此问题。这个和gitattributes联机帮助页面的github帮助页面是很好的资源。
Trying to fix line-endings with git filter-branch, but having no luck https://help.github.com/articles/dealing-with-line-endings https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
请不要错过github帮助末尾的部分,该部分介绍了在完成此设置后如何规范化您的回购:
在设置core.autocrlf选项并提交.gitattributes文件之后,您可能会发现git想要提交您未修改的文件。这是因为git想要为你的行结尾标准化。最好的方法是......
当不匹配案例的文件/目录已存在时,不区分大小写的文件系统
特别是,Src
dir对我来说特别可疑。这通常是因为有人将回购中的文件重命名为同一名称,但对一个或多个字母使用了不同的大小写。然后有人更新他们的本地仓库和工作目录,git被(不区分大小写的文件系统)文件系统告知文件/目录已经存在,但是其他git代码会将文件/目录视为新的。
尝试在新的或空目录中进行新的克隆。查看新鲜克隆中的有问题文件与原始克隆的路径之间的文件名/目录字母大小写是否不同(仔细查看Src
目录 - 它可能是回购中的src
。我可以在Unix / Linux系统上进行新的克隆。
文件名中的Unicode字符
这似乎不是你的问题,但我认为值得一提的是完整性。这是不区分大小写问题的变体,但也受文件系统如何处理文件名中的Unicode字符的影响。
有关其他人在文件名中使用Unicode的问题的说明,请参阅Git clean not removing a file。
答案 1 :(得分:1)
此问题可能是由于不同操作系统中的行结束首选项。
如果您是Unix/Mac
用户,请将配置设置如下
git config --global core.autocrlf input
git config --global core.safecrlf true
如果您在Windows
,请尝试按以下配置
git config --global core.autocrlf true
git config --global core.safecrlf true
完成这些设置后,切换分支后,git status
不应抱怨任何内容。
答案 2 :(得分:1)
git clean -id
应该做你想要的。
i
将让您验证在d
告诉它删除额外目录时删除的内容。小心不要太干净,拿出任何想要保留的东西。