如何清理回购,如果阶段性文件标记为修改?
后
git reset --hard
我得到
Encountered 7 file(s) that should have been pointers, but weren't:
运行git clean -fdx也没有帮助。
如何清理回购,如果阶段性文件标记为修改?
后
git reset --hard
我得到
Encountered 7 file(s) that should have been pointers, but weren't:
运行git clean -fdx也没有帮助。
当前回答
上面的命令对我都没用,我在这里找到了答案
git status -s | cut -c 4- | xargs git update-index --assume-unchanged
rm .git/index && git reset
其他回答
这是我遇到的问题:
假设您创建了一个分支,并以某种方式将文件提交为非lfs。因此,您试图通过稍后在同一分支上提交文件的LFS版本来纠正它。然而,现在你不能重基或压缩,因为你会一直遇到这种“文件应该是指针,但不是”错误在重基中间。
解决使用git重置——软:https://stackoverflow.com/a/5201642/2516916
导致此错误的一个可能原因是git lfs对.gitattributes的相关更改影响了repo中已经添加的文件。
(我不确定复制的确切步骤,但问题似乎发生在我接触到一个文件时,该文件最近受到.git属性的影响,该文件以前被提交为非LFS文件,现在应该是LFS文件。切换分支似乎加剧了这个问题,或者至少在问题解决之前不可能切换分支。)
在本例中,我使用下面的步骤来防止此错误重复发生。
通过遵循这里的其他答案之一来修复您所在分支的问题(例如,清除缓存和重置。我发现BheeMa的答案很有效。) 转到你的主分支,确保git状态下没有什么要提交的 强制git重新检查并“重新应用”git属性更改
从Ratata Tata的回答如何改变。gitattributes生效)
git rm --cached -r .
git add -A
警告:确保在第2步中没有任何东西要提交,因为上面的步骤将添加以前没有版本的任何文件
Verify the results with git status (it should only have modified relevant files to become LFS pointers, i.e. files that can potentially cause the "encountered files that should have been pointers" error) and commit changes (Optionally, merge/rebase this fix to all other branches if possible. Otherwise, this error could pop up again when switching to those branches. Note that it may be necessary to repeat the initial fix for each branch as per step 1 to be safe, though it could be ok just to commit the affected files.)
如果你只是想摆脱那个糟糕的承诺,你可以回到master by
git reset --soft origin/master
git reset --hard
然后你从讨厌的7非lfs文件中解脱出来:-)
自从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"为该提交设置一个提交消息。
run
git add --renormalize .
并提交这些更改。即使当另一个用户在另一个分支上做同样的事情时,这样做也是安全的,因为LFS指针是从文件的散列派生的。它还可能捕获一些行尾错误的文件。