我无法清除本地git中的未暂存文件

jpfvwuh4  于 2023-01-19  发布在  Git
关注(0)|答案(4)|浏览(254)

checkout 分支(主)和git pull后,我有两个文件显示为已修改,我无法摆脱。
我什么都试过了(git stashgit checkout .git resetgit reset --hardgit reset --hard HEAD)。
即使在删除并再次克隆项目之后,运行git status也始终会显示这些文件。
我能做什么?这是git状态的结果:

Mahans-MacBook-Pro:finance-service-platform Mahan$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   tests/Mocks/Models/CarInsurance/PackageMock.php
    modified:   tests/mocks/Models/CarInsurance/CarSubmodelMock.php

no changes added to commit (use "git add" and/or "git commit -a")

这也是我的.gitignore内容:

/vendor
.env
apidoc.json
docs/*
.phpintel/
.idea
kh212irz

kh212irz1#

我认为这里的问题是你在Mac上使用了一个不区分大小写(但保留大小写)的文件系统,而git是区分大小写的。
这意味着,在git repo中,文件名(path-)可能只是大小写不同,但在文件系统中却不可能,其结果是当你 checkout 一个提交时,其中一个文件不可避免地会覆盖另一个文件,除非两个文件完全相同,否则git在 checkout 时会 * 总是 * 看到修改过的文件。
解决方案是不这样做:如果你可能不得不使用一个不区分大小写的文件系统,那么就不要让文件名只在大小写上不同。
要解决此问题:
1.将repo克隆到具有区分大小写的文件系统(Linux或其他传统Unix文件系统:不是Windows,不是具有默认装载选项的OSX);
1.找到有问题的文件(git ls-files是您的朋友);
1.以某种方式解决问题,提交更改并推动;
1.利润。
git可能有一些选项,让它以更有用的方式检测此类问题:如果是的话我不知道是什么。

lokaqttq

lokaqttq2#

我找到了答案。感谢@tfb我刚刚提交了git要求的新修改,运行测试后,一切正常,然后我按下master。但我再次遇到了同样的问题,但这次我运行了一次git stash,然后git pull它获取了我的新提交,现在它正常了

pgpifvop

pgpifvop3#

我认为git有一个非常常见的问题,当在PC和Mac/Linux上使用同一个仓库时,这个问题就会出现:
不知何故,有人可能提交了这些文件两次。因为Windows是大小写不敏感时,在谈到文件系统,它发生的文件可以提交多次,在不同的大小写。
这让Git抓狂,首当其冲的是Mac/Linux用户,他们会看到两个不同的大写,每次一个。Git会将两个版本的文件名的更改存储在同一个空间,但在Mac/Linux上会分别显示文件的每个版本。
解决这个问题的最佳方法是备份文件的正确版本,然后使用git rm删除它,然后提交删除操作。Git将再次显示该文件(通常使用不同的大小写),同时删除第二个示例,直到该文件的变体不再出现,并且该文件在仓库中不存在为止。
然后重新创建文件(注意正确的大小写)并使用git add将其添加到repo中,然后推送更改。确保所有仍有问题的用户在此操作完成后重新克隆repo。

7lrncoxx

7lrncoxx4#

另一个可能导致此问题的问题是CRLF<->LF转换。如果您键入“git diff”,您可能会收到消息“warning:CRLF将由LF取代”
在这种情况下,请参见Git replacing LF with CRLF的答案
在我的例子中,我使用的是旧版本的git,通过升级git解决了这个问题。

相关问题