如何清理回购,如果阶段性文件标记为修改?

git reset --hard

我得到

Encountered 7 file(s) that should have been pointers, but weren't:

运行git clean -fdx也没有帮助。


当前回答

run

git add --renormalize .

并提交这些更改。即使当另一个用户在另一个分支上做同样的事情时,这样做也是安全的,因为LFS指针是从文件的散列派生的。它还可能捕获一些行尾错误的文件。

其他回答

run

git add --renormalize .

并提交这些更改。即使当另一个用户在另一个分支上做同样的事情时,这样做也是安全的,因为LFS指针是从文件的散列派生的。它还可能捕获一些行尾错误的文件。

这里有一个修饰,不需要重新安装lfs钩子或模糊任何.gitattributes文件:

git -c filter.lfs.smudge= -c filter.lfs.clean= reset --hard

就像Travis Heeter在他的回答中提到的,试试下面的命令序列:

git lfs uninstall
git reset --hard
git lfs install
git lfs pull

如果这是不工作(因为这不是为我工作),下面的黑客可能工作:

git rm --cached -r .
git reset --hard
git rm .gitattributes
git reset .
git checkout .

这对我很管用!

与上面的@John Kugelman一样,但我把它放在一个别名中,因为我必须这么做很多次。

    
git rm --cached -r . > /dev/null && git reset --hard > /dev/null && git rm .gitattributes > /dev/null && git reset . && git checkout . > /dev/null

自从git lfs 2.5.0以来,有一个新的命令可以让这变得更容易(docs):

git lfs migrate import --no-rewrite "broken file.jpg" "another broken file.png" ...

这将文件“迁移”到git lfs中,根据.gitattributes应该在lfs中,但目前没有(这就是出现错误消息的原因)。

——no-rewrite阻止git将此应用于旧的提交,而是创建一个新的提交。

使用-m "commitmessage"为该提交设置一个提交消息。