Git从存储库,Github和commiters中删除文件

时间:2011-08-02 17:01:42

标签: git github git-filter-branch

有人意外地将80兆的JPG检入我们的git存储库并将其推送到github中央存储库。

此后有几个人撤了这些变化。

除了拍摄提交者之外,我还能从存储库的历史记录和github中完全删除这些图像?然后在其他提交者身上造成所有更改。

4 个答案:

答案 0 :(得分:4)

您需要使用git reset sha_of_last_good_commit修复更改,而不是使用git push -f推送备份。您需要告诉每个人撤回新的更改。

  • 如果您希望与糟糕提交混合进行更改,则需要git rebase -i在推送​​修复 repo回到github。

  • 垃圾收集最终将删除悬空物体,或者您可以使用git gc --aggressive

  • 强制它

答案 1 :(得分:1)

更激进的方法是使用filter-branch

git filter-branch --tree-filter 'rm -f *.jpg' HEAD

然而,在使用它时你应该非常小心,因为你真的可以搞砸你的回购。在执行任何操作之前,您应该检查docs

答案 2 :(得分:0)

使用git reset将更改还原到此人提交之前。我认为不可能对已经撤消更改的人强制更新。

git reset --hard HEAD~3 ## will reset the head to three commits ago

第二个想法,文档说:

  

最后三次提交(HEAD,HEAD ^和HEAD~2)都很糟糕,你这样做了   不想再见到他们了。如果你已经这样做,不要这样做   鉴于这些提交给其他人。

tl; dr - 只需删除文件即可。我不知道你可以删除历史,你不能强迫在像git这样的分布式系统中更新某些东西。

答案 3 :(得分:0)

即使您git reset --hard HEAD~3,然后git push --force问题仍未解决。

gpojd引用:

  

如果您已将这些提交给其他人

,请不要这样做

但是,你做到了。如果您将修改后的版本推送到中央仓库,并且已经从中央仓库获取了包含三次错误提交的版本的人,那么他/她的仓库中仍会存在三个错误提交。

当三个糟糕的提交存在时,所有已经从回购中撤出的人将不得不从他/她的回购中删除这些错误的提交以使它们再次清洁。

所以告诉他们启动一个控制台并使用git fetch origin(从GitHub获取版本)git rebase -i origin/master来修改他们强制推送的主分支并告诉他们SHA-ID提交他们将不得不删除。