[英]Git remove files from repository, Github and commiters
有人意外地將80兆的JPG檢入我們的git存儲庫並將其推送到github中央存儲庫。
有幾個人因為這些變化。
除了拍攝提交者之外,我還能從存儲庫的歷史和github中完全刪除這些圖像? 然后在其他提交者身上造成所有更改。
您需要使用git reset sha_of_last_good_commit
來修復更改, git reset sha_of_last_good_commit
不是使用git push -f
推送這些備份。 您需要告訴每個人撤回新的更改。
如果有想要與糟糕提交混合的更改,則需要git rebase -i
在您將固定存儲庫重新推送到github之前拔出您不想要的更改。
垃圾收集最終將刪除懸空物體,或者您可以使用git gc --aggressive
強制它
更激進的方法是使用filter-branch
。
git filter-branch --tree-filter 'rm -f *.jpg' HEAD
但是在使用它時你應該非常小心,因為你真的搞砸了你的回購。 你應該在做任何事之前檢查文檔 。
使用git reset將更改還原到人員提交之前。 我認為不可能對已經撤消更改的人強制更新。
git reset --hard HEAD~3 ## will reset the head to three commits ago
第二個想法是,文檔說:
最后三次提交(HEAD,HEAD ^和HEAD~2)很糟糕,你不想再看到它們。 如果你已經將這些提交給了其他人,請不要這樣做。
tl; dr - 只需刪除文件即可。 我不知道你可以刪除歷史,你不能強迫在像git這樣的分布式系統中更新某些東西。
即使你git reset --hard HEAD~3
,然后git push --force
問題也沒有解決。
正如gpojd引用的那樣:
如果你已經將這些提交給了其他人,請不要這樣做
但是,你做到了。 如果您將修改后的版本推送到中央倉庫並且已經從中央倉庫獲取包含三次錯誤提交的版本的人,則他/她的倉庫中仍然存在三個錯誤提交。
當三個糟糕的提交存在時,每個已經從回購中撤出的人將不得不從他/她的回購中刪除這些錯誤的提交以使它們再次清潔。
所以告訴他們啟動一個控制台並使用git fetch origin
(從GitHub獲取版本) git rebase -i origin/master
來重新強制你強制推送的主分支並告訴他們提交的SHA-ID必須刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.