Git 为什么即使我';你删除了吗?

Git 为什么即使我';你删除了吗?,git,Git,有没有办法告诉我为什么Git会保留一个文件,即使我认为它必须放弃它?我正试图通过删除大文件来重写提交历史记录。以下是我所做的: git filter-branch -f --tree-filter "rm -rf *.mp4" 573edba..HEAD 我也试过: git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.mp4' 573edba..HEAD 我看到有人报告说他们被撤职了。我还运行了git-gc

有没有办法告诉我为什么Git会保留一个文件,即使我认为它必须放弃它?我正试图通过删除大文件来重写提交历史记录。以下是我所做的:

git filter-branch -f --tree-filter "rm -rf *.mp4" 573edba..HEAD
我也试过:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.mp4' 573edba..HEAD
我看到有人报告说他们被撤职了。我还运行了
git-gc

我在存储库中有两个分支,所以我在master和development分支上都运行了这个

现在,如果我这样做:

git ls-files | grep '.mp4'

我没有结果

但是,当我像这样检查索引文件时:

git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr
然后我取第一个SHA1,看看它是什么:

git rev-list --all --objects | grep $SHA1
我得到
/path/to/file.mp4



问题是:我如何一劳永逸地删除该文件?我如何知道为什么该文件仍在存储库中?是什么让Git相信它必须存在?

您必须更新Git存储库,请使用以下命令:

git add -u .
git commit -m "some commit"

然后享受生活:D

您必须更新git存储库,请使用以下命令:

git add -u .
git commit -m "some commit"

然后享受生活:D

因为
git filter branch
是一个非常危险的操作,所以您的旧分支头的备份保存在
.git/refs/original
中。这将阻止
git gc
删除这些头引用的任何对象


您只需删除
.git/refs/original
并再次运行
git gc
,或者简单地克隆您的本地repo,以便从您的repo中实际删除所有那些大的blob。

因为
git filter branch
是一个非常危险的操作,您的旧分支头的备份保存在
.git/refs/original
中。这将阻止
git gc
删除这些头引用的任何对象


你只需要删除
.git/refs/original
并再次运行
git gc
,或者简单地克隆你的本地回购,以便从你的回购中删除所有的大斑点。

我将回答我自己的问题,尽管之前已经给出了一些很好的建议。这是因为很少有事情没有提到其他

为了让它工作,我需要做的重要事情:

  • git过滤器分支之后
    我需要删除文件
    .git/refs/original
  • 之后,我不得不调用git-gc--prune=now
  • 在那之后,
    git repack-a-d
  • 重要提示:您必须删除遥控器<代码>git远程rm源站
  • 也许顺序不正确,但重复这些步骤中的某些步骤最终会让你达到目标

  • 推。确保服务器设置


  • git推送-f
  • 希望您可以使用SSH连接到服务器,因为您还没有完成
  • 在服务器存储库中,再次需要调用
    git gc
    git repack
    以最终缩小存储库,删除删除的文件

我将回答我自己的问题,尽管之前已经给出了一些好的建议。这是因为很少有事情没有提到其他

为了让它工作,我需要做的重要事情:

  • git过滤器分支之后
    我需要删除文件
    .git/refs/original
  • 之后,我不得不调用git-gc--prune=now
  • 在那之后,
    git repack-a-d
  • 重要提示:您必须删除遥控器<代码>git远程rm源站
  • 也许顺序不正确,但重复这些步骤中的某些步骤最终会让你达到目标

  • 推。确保服务器设置


  • git推送-f
  • 希望您可以使用SSH连接到服务器,因为您还没有完成
  • 在服务器存储库中,再次需要调用
    git gc
    git repack
    以最终缩小存储库,删除删除的文件

完成后,它会显示“无需提交(工作目录清理)”。虽然我认为它试图给我一个提示:当我签出另一个分支时,它会说这样的话:您的分支和“源代码/开发”已经分开,分别有120个和120个不同的提交。哎呀,对不起,重复发布。我想它想说的是,不知何故,我现在有了同一分支的两个不同版本,但出于某种原因,它仍然保留了旧的版本。嗯,好吧,但现在你正试图删除“旧”分支?嗯,这只是一个猜测,我真的不知道该消息想说什么。我在origin中有两个分支:master和development,我创建了同名的本地分支来跟踪远程分支。到目前为止,我对本地分支机构所做的所有更改。我什么也没推。消息只是信息,它告诉你你签出的分支有多不同,在这种情况下,两者都有120次提交。也许你需要一个合并,因为你喜欢文件在新的BranchOne中消失,它说“无需提交(工作目录清理)”。虽然我认为它试图给我一个提示:当我签出另一个分支时,它会说这样的话:您的分支和“源代码/开发”已经分开,分别有120个和120个不同的提交。哎呀,对不起,重复发布。我想它想说的是,不知何故,我现在有了同一分支的两个不同版本,但出于某种原因,它仍然保留了旧的版本。嗯,好吧,但现在你正试图删除“旧”分支?嗯,这只是一个猜测,我真的不知道该消息想说什么。我在origin中有两个分支:master和development,我创建了同名的本地分支来跟踪远程分支。到目前为止,我对本地分支机构所做的所有更改。我什么也没推。消息只是信息,它告诉你你签出的分支有多不同,在这种情况下,两者都有120次提交。也许你需要一个合并你喜欢的文件消失在
[receive]
    denyNonFastforwards = false