git - 为什么在 git 中切换分支时会出现无法消除的差异,如何解决?

标签 git

这是命令行的一些相关输出(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]>

这是怎么发生的,除了提交更改之外我该如何解决它,因为我似乎无法撤消差异。即使 stash 也无济于事。

对于我们如何陷入这种困境以及如何摆脱困境的一些建议,我们将不胜感激。

我现在已经能够可靠地重现这个,所以我能够得到一个更明确的答案。如果我刚克隆我的 repo,然后切换到一个分支,然后返回到 master,我会得到一些文件说它们有变化。我试过使用 core.autocrlf 的设置,但这似乎只是改变了受影响的文件数量,并没有完全解决问题。

我能做些什么来尝试解决这个越来越烦人的问题?

最佳答案

您没有提及您使用的操作系统、您的远程仓库使用的操作系统(如果有)或者您的团队是否与其他操作系统跨平台工作。此类信息可能有助于诊断问题。

我曾见过此类问题的出现是由于:

  • 行尾(Windows vs Mac vs Linux)

    您可以使用 core.*crlf 设置和 .gitattributes 文件修复此问题。 github 帮助页面和 gitattributes 联机帮助页是这方面的重要资源。

    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 帮助末尾的部分,它讨论了在获得此设置后如何规范化您的存储库:

    After you've set the core.autocrlf option and committed a .gitattributes file, you may find that git wants to commit files that you've not modified. This is because git wants to normalize the line endings for you. The best way to do this is ...

  • 当大小写不匹配的文件/目录已经存在时不区分大小写的文件系统

    特别是 Src 目录对我来说特别可疑。这通常是因为有人将存储库中的文件重命名为相同的名称,但对一个或多个字母使用了不同的大小写。然后有人更新他们的本地存储库和工作目录,(不区分大小写的文件系统)文件系统告诉 git 文件/目录已经存在,但其他 git 代码会将文件/目录视为新的。

    尝试将新克隆到新目录或空目录中。查看新克隆和原始克隆中有问题文件的路径之间的文件名/目录名字母大小写是否不同(仔细查看 Src 目录 - 它可能是 src 在 repo 中。如果可用,我会在 Unix/Linux 系统上进行全新克隆。

  • 文件名中的 Unicode 字符

    您的问题似乎并非如此,但我认为为了完整性值得一提。这是不区分大小写问题的一个变体,但也受到文件系统处理文件名中 Unicode 字符的方式的影响。

    参见 Git clean not removing a file有关其他人在文件名中使用 Unicode 时遇到的问题的描述。

关于git - 为什么在 git 中切换分支时会出现无法消除的差异,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20426866/

相关文章:

git - 如何加载特定的 git 提交?

c++ - 将 Git 提交哈希读入 C++ 时出错

ruby-on-rails - "modified: Gemfile.lock",为什么?

git - 用 `git add -p` 解开两行

git-remote-https 坏了

git - 如何通过命令 args 更改 `git log --graph` 中的图形线条字符?

git - 比较 git branch 和 rebased branch

Git 克隆挂起 - 有没有办法继续克隆?

git - 索引文件小于预期

git - 如何将 Windows 凭据管理器与 ubuntu 连接