如何查找最近一次git fetch获取的大对象?
定位Git Fetch新增的大文件所属分支
一、精准定位本次Fetch新增的大对象
如果你能通过Git日志找到本次fetch前远程分支的状态,可直接对比出新增的提交与关联对象:
查看远程分支的更新记录,找到上次fetch对应的分支头哈希:
git reflog show origin/HEAD比如输出中类似
abc123 HEAD@{5}: fetch origin: fast-forward的行,abc123就是上次fetch完成后的远程分支头哈希。列出本次fetch新增的所有提交及关联对象:
git rev-list abc123..origin --objects筛选出大小超过阈值(示例为10MB)的对象:
git rev-list abc123..origin --objects | awk '{print $1}' | xargs git cat-file -s | awk '$2 > 10*1024*1024'查找大对象所属的提交和分支:
git log --all --find-object=<大对象哈希> --oneline输出会显示包含该对象的所有提交,以及对应的分支标签。
二、按时间范围近似排查
如果找不到旧哈希,可通过时间范围筛选最近X天远程分支新增的提交:
列出最近3天远程分支新增的提交及对象:
git rev-list --since="3 days ago" origin --objects重复上述筛选大对象、定位分支的步骤即可。
三、针对「提交大文件后又删除」的场景
这种情况大对象仍存在于Git历史中,除通用方法外,还可直接追踪删除记录:
找出所有包含文件删除操作的提交:
git log --all --diff-filter=D --summary针对疑似的删除提交,查看被删文件的大小:
git show <提交哈希>:<被删除文件路径> | wc -c或直接查看提交的diff详情确认:
git show <提交哈希>找到对应提交后,查看该提交所属的所有分支:
git branch --contains <提交哈希>
内容的提问来源于stack exchange,提问作者TTT
相关产品推荐
相关产品推荐

