git lfs 无法丢弃文件更改(遇到应该是指针的文件)

Sam*_*son 13 git git-lfs

我有一个使用 git lfs 的文件,但即使我不做任何事情,它也会在 git 上显示为有更改。我无法放弃这些更改,无论是通过 VS Code UI、git重置还是git恢复。

Git 不断告诉我“遇到 1 个应该是指针的文件,但不是:”

我知道Git error: Encountered 7 file(s) that Should had werepoints, but were not 的线程,但我已经尝试了那里的所有解决方案,但没有一个有帮助。

bk2*_*204 15

这是 Git 的限制,因为有人在没有使用 Git LFS 的情况下提交了由 Git LFS 跟踪的文件。Git FAQ简要提到了这一点

发生这种情况是因为当文件在工作树中被标记为已修改时,Git 通过 clean 过滤器(即 Git LFS)运行该文件以查看它是否已更改。当发生这种情况时,Git LFS 将其转换为指针文件,但索引中的文件是完整的 Git 文件,因此它被标记为已修改。尝试使用git reset --hard不会改变任何事情,因为 Git 仍然将其写入树中并要求 Git LFS 以相同的方式清理它,所以没有任何变化。

Git LFS 无法控制此行为,也无法检测到它,因为 Git 没有提供指示用户是否正在运行的方法git reset --hard。对于一个干净的工作树,您需要运行git add --renormalize .并提交。之后,该文件将转换为 LFS 文件,并且不会再次发生这种情况。请注意,进行此更改的提交必须出现在每个受影响的分支上才能修复它。

如果您设置了 CI,则可以使用 Git LFS 3.0.1 或更高版本来运行git lfs fsck --pointers以检查所有文件是否都是正确的 LFS 文件并拒绝任何失败的提交。您可以查看手册页以获取更多详细信息