2015-09-10 131 views
1

撤消以前推送到遠程存儲庫的問題已經被問了好幾次,但在我看來,答案並不完整。根據Git - Undo pushed commits中的建議,我可以重置遠程存儲庫,以便其行爲就像從未發生過最後一次提交一樣。但是,似乎撤消提交的效果仍然顯示在git存儲庫的大小中。git撤消推送提交對存儲庫大小的影響

這裏的假設情況: 用戶並git addgit commit即把一個巨大的文件,「BigFatFile.bin」到版本控制。他將更改推送到遠程存儲庫。假設這個文件很大,也許是1GB。我們不想在git中維護這些文件。所以我們試圖撤銷這個錯誤的提交,如下所示:

  1. 克隆遠程存儲庫。
  2. 執行git reset --hard HEAD^刪除上次提交。
  3. 執行git push -f將更改推送到遠程存儲庫。

這似乎工作,除了在遠程存儲庫的大小仍然可見的推的影響的事實。它的尺寸增加了1 GB。

有可能在庫的本地副本做清理步驟,使用git refloggit gcgit repack,從而降低了本地存儲庫的大小,這是什麼提交「BigFatFile.bin」之前。但是做一個git push(或git push -f)似乎並沒有減少遠程倉庫的大小。

如何永久撤銷上次推送的提交,以便存儲庫的大小恢復到推送前的大小?

回答

1

遠程回購的大小對於克隆它的客戶來說應該不重要:克隆回購應該再小一點。

正如我在「Clean up large files on git server」中提到的那樣,您需要在服務器端執行git gc; git repack -Ad; git prune,以確保回收的大小縮小。
取決於服務器,這可能是不可能的。例如,如果這是一個GitHub託管的回購,您需要聯繫GitHub支持以確保執行清理任務。

+0

非常感謝。我有權訪問服務器(不是GitHub),所以我可以運行該代碼。我對可以在裸存儲庫上運行哪些命令以及哪些命令無法運行有點困惑,因此我認爲清理必須在克隆的存儲庫上完成,然後再推送。 –

+0

@DarylMcCullough你可以在服務器端裸回購這些命令。 – VonC