如何查找引用了指定LFS对象的Git提交记录?
查找引用丢失LFS对象的提交的操作方法
你遇到的GH008报错是因为仓库历史提交中存在指向该丢失LFS对象的指针文件,
git fsck --full默认仅检查Git原生对象的完整性,不校验LFS对象是否存在,因此无报错。
精准查找关联提交的命令
执行以下命令即可列出所有引用了目标LFS对象的提交哈希:
git rev-list --all | while read commit; do git grep -l "oid sha256:B41C79ADE3155B758388A338200A7B2A79E9FDBF48D5C4AFEDCE03886F4B873A" $commit -- ':(attr:filter=lfs)' > /dev/null if [ $? -eq 0 ]; then echo "关联提交哈希:$commit" fi done
命令说明:
git rev-list --all遍历本地仓库所有分支、标签对应的全量提交:(attr:filter=lfs)过滤条件仅匹配被Git LFS跟踪的文件,避免普通文件内容匹配导致的误判- 匹配到对应LFS对象哈希的提交会直接输出哈希值
查看提交关联的具体文件
如果需要确认是哪个文件引用了该丢失的LFS对象,执行以下命令(将<替换为查到的提交哈希>替换为上一步输出的提交哈希):git show <替换为查到的提交哈希>:$(git grep -l "oid sha256:B41C79ADE3155B758388A338200A7B2A79E9FDBF48D5C4AFEDCE03886F4B873A" <替换为查到的提交哈希> -- ':(attr:filter=lfs)')
后续修复参考
确认不需要保留该LFS对象相关内容后,可使用git filter-repo或BFG Repo-Cleaner工具从历史记录中移除对应指针文件,清理完成后即可正常推送到GitHub仓库。
内容的提问来源于stack exchange,提问作者HelloWorld
相关产品推荐
相关产品推荐

