我有一个分叉的存储库。在某些时候,我需要合并来自上游的更改,我就这样做了。有一些冲突,我解决了它们。我不太记得了,但我想我在修复冲突期间取消了一些文件。一切完成后,我开始面对一些奇怪的事情,但我无法解决它。
问题是无论我做什么,总是有六个文件被修改(
checkout
不影响它们)。我认为它可能会修复,所以我删除了我的分叉并重新分叉,但是当我克隆并将分支从主分支更改为分支时,我正在创建拉取请求,我再次遇到了同样的问题。
如果需要的话我可以提供更多细节
您遇到区分大小写的问题:当 git 尝试检出磁盘上的文件
foo
和 Foo
时,由于您的文件系统不区分大小写,因此其中一个文件“获胜”并覆盖另一个文件的内容。
经常:其中一个文件名是“错误的”,你可以删除它。
如果这是你的情况:就跑吧
git rm --cached Foo # the variant with the incorrect casing
并检查磁盘上的文件是否使用正确的名称变体命名 (*)。
您还想获取文件的正确内容:您可以使用
foo
来查看 Foo
提交中为 HEAD
和 git show
存储的内容 :
git show HEAD:foo
git show HEAD:Foo
# overriding the content of 'foo' with 'HEAD:Foo' :
git show HEAD:Foo > foo
# dumping into two temp files for comparison and cmd+C/cmd+V :
git show HEAD:foo > foo.tmp.lo
git show HEAD:Foo > Foo.tmp.up
一旦你弄清楚了文件在 git 中应该如何命名以及正确的内容是什么,你就可以
commit
或 commit --amend
。
(*) 一个常见问题:不区分大小写的文件系统倾向于将
mv Foo foo
视为无操作,并会在计算机上留下一个名为 Foo
的文件。
一个快速的解决方法是首先重命名为临时名称,例如:
mv Foo foo.tmp
mv foo.tmp foo