2011-08-02 89 views
3

有人不小心将80 MB的JPG文件检入我们的git存储库并将其推送到github中央存储库。Git从存储库,Github和commiters中移除文件

有几个人自拉动这些变化。

除了拍摄提交者,我能做些什么来完全从存储库的历史记录和github中删除这些图像?然后施加其他提交者的所有更改。

回答

1

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

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

但是你应该非常慎用本品时,你可以真的搞砸你的回购协议。在做任何事之前,你应该检查docs

+0

我不得不在最后使用它。 – iBiryukov

0

使用git reset将更改恢复到该人员提交之前。我认为不可能为已经提交更改的人强制更新。

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

关于第二个想法,文档说:

最后三个提交(HEAD,HEAD ^,和HEAD〜2)是坏的,你做 不想再见到他们。如果您已将 这些提交给其他人,请不要这样做。

tl; dr - 只删除文件。我不知道你可以删除历史记录,也不能强制在分布式系统(如git)中更新某些内容。

4

您需要修复git reset sha_of_last_good_commit所做的更改,而不是使用git push -f来推动备份。您不仅需要告诉所有人将新变化重新放回原处。

  • 如果有要保持与坏提交混杂的变化,你将需要git rebase -i掐了,你把你的固定回购备份到github上之前,你不想要的人。

  • 垃圾收集将最终删除悬而未决的对象,或者你可以用git gc --aggressive

+0

拉夫们需要非常小心,否则他们只会重新提交提交。最好如果你让他们重新克隆。确保他们保存旧的本地回购,这样你就不会失去任何他们可能没有的工作。 – Tekkub

0

即使你git reset --hard HEAD~3,然后git push --force问题没有解决强迫它。

由于gpojd引用:

如果你已经给了这些提交给别人

但是好了,你没有不要这样做。如果您将修改后的版本推送到中央仓库,并且有人从中央仓库中提取了包含三个错误提交的版本,则三个错误的仓库仍然存在于其回购仓库中。

当存在三个错误提交时,所有从回购中退出的人都必须从他/她的回购中删除这些错误的提交,以使其再次清理。

所以告诉他们启动一个控制台和使用git fetch origin(来从GitHub上的版本)git rebase -i origin/master衍合你的强行master分支推一个,并告诉他们,他们将不得不删除提交的SHA-ID的。

相关问题