Git 切换分支时删除文件

Git removes file when switching branches

如果我检出 git 分支,有时文件 path/to/File 会被删除。我可以将其视为手术后未分阶段的更改。始终是同一个文本文件,很久没有编辑过。所以它应该是每个分支的相同文件。 (但一个分支称它为 path/to/file。)

通常我使用Atlassian Sourcetree来切换分支,但问题也出现在我们的gitlab ci/cd runner上,可能使用简单的git命令行命令。

问题出现在存储库的各个克隆和各个分支中。

存储库是否已损坏?知道如何解决这个问题吗?

这是一个区分大小写的问题:git 需要一个具有特定字母大小写的文件,但您的系统可以使用不同的字母大小写。

可能有两种与此相关的错误:

  • git 的存储中可能只有 filename 的一个“版本”,
  • git 的存储中可能有 filenameFileName 版本。

检查 git 的提交 (git ls-tree HEAD:path/to/directory) 的内容以查看您有什么变体。

  • 如果是第一个:“修复”它只需要在 git 的存储中选择正确的名称,并确保磁盘上的名称相同,

  • 如果是第二个:你还需要比较两个版本的内容(一种方式是git diff HEAD:path/to/filename HEAD:path/to/FileName),并检查应该保留哪个版本。

注意事项:Windows 将 mv filename FileName 视为 noop,更改磁盘上名称大小写的最简单方法是通过临时名称 mv filename tempfile && mv tempfile FileName