有人不小心將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