有人不小心将80 MB的JPG文件检入我们的git存储库并将其推送到github中央存储库。Git从存储库,Github和commiters中移除文件
有几个人自拉动这些变化。
除了拍摄提交者,我能做些什么来完全从存储库的历史记录和github中删除这些图像?然后施加其他提交者的所有更改。
有人不小心将80 MB的JPG文件检入我们的git存储库并将其推送到github中央存储库。Git从存储库,Github和commiters中移除文件
有几个人自拉动这些变化。
除了拍摄提交者,我能做些什么来完全从存储库的历史记录和github中删除这些图像?然后施加其他提交者的所有更改。
更激进的做法是使用filter-branch
。
git filter-branch --tree-filter 'rm -f *.jpg' HEAD
但是你应该非常慎用本品时,你可以真的搞砸你的回购协议。在做任何事之前,你应该检查docs。
使用git reset将更改恢复到该人员提交之前。我认为不可能为已经提交更改的人强制更新。
git reset --hard HEAD~3 ## will reset the head to three commits ago
关于第二个想法,文档说:
最后三个提交(HEAD,HEAD ^,和HEAD〜2)是坏的,你做 不想再见到他们。如果您已将 这些提交给其他人,请不要这样做。
tl; dr - 只删除文件。我不知道你可以删除历史记录,也不能强制在分布式系统(如git)中更新某些内容。
您需要修复git reset sha_of_last_good_commit
所做的更改,而不是使用git push -f
来推动备份。您不仅需要告诉所有人将新变化重新放回原处。
如果有要保持与坏提交混杂的变化,你将需要git rebase -i
掐了,你把你的固定回购备份到github上之前,你不想要的人。
垃圾收集将最终删除悬而未决的对象,或者你可以用git gc --aggressive
拉夫们需要非常小心,否则他们只会重新提交提交。最好如果你让他们重新克隆。确保他们保存旧的本地回购,这样你就不会失去任何他们可能没有的工作。 – Tekkub
即使你git reset --hard HEAD~3
,然后git push --force
问题没有解决强迫它。
由于gpojd引用:
如果你已经给了这些提交给别人
但是好了,你没有不要这样做。如果您将修改后的版本推送到中央仓库,并且有人从中央仓库中提取了包含三个错误提交的版本,则三个错误的仓库仍然存在于其回购仓库中。
当存在三个错误提交时,所有从回购中退出的人都必须从他/她的回购中删除这些错误的提交,以使其再次清理。
所以告诉他们启动一个控制台和使用git fetch origin
(来从GitHub上的版本)git rebase -i origin/master
衍合你的强行master分支推一个,并告诉他们,他们将不得不删除提交的SHA-ID的。
我不得不在最后使用它。 – iBiryukov