gpt4 book ai didi

Git:如何从历史提交中删除文件?

转载 作者:IT王子 更新时间:2023-10-29 01:23:30 25 4
gpt4 key购买 nike

例如,我有一个 ID 为 56f06019 的提交。在那次提交中,我不小心提交了大文件(50 MB)。在另一个提交中,我添加了相同的文件,但大小合适(小)。现在,当我克隆时,我的 repo 协议(protocol)太重了。如何从存储库历史记录中删除该大文件以减小存储库的大小?

最佳答案

第 9 章 Pro Git书中有一节关于 Removing Objects .

让我在这里简要概述一下步骤:

git filter-branch --index-filter \
'git rm --cached --ignore-unmatch path/to/mylarge_50mb_file' \
--tag-name-filter cat -- --all

和之前介绍的rebase选项一样,filter-branch是重写操作。如果您已发布历史记录,则必须--force 推送新引用。

filter-branch 方法比 rebase 方法更强大,因为它

  • 允许您同时处理所有分支/引用,
  • 即时重命名任何标签
  • 即使在添加文件后有多次 merge 提交,也能正常运行
  • 即使在 (a) 个分支的历史记录中多次(重新)添加/删除文件,也能正常运行
  • 不创建新的、不相关的提交,而是在修改与它们关联的树时复制它们。这意味着签名的提交、提交说明等内容将被保留

filter-branch 也保留备份,因此除非您使 reflogs 和垃圾收集过期,否则 repo 的大小不会立即减少:

rm -Rf .git/refs/original       # careful
git gc --aggressive --prune=now # danger

关于Git:如何从历史提交中删除文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8740187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com