2009-10-20 21 views
8

我意外地將一些大的測試wav文件提交到我的存儲庫中,他們在我的Github帳戶上佔用了大量空間。我如何從歷史記錄中刪除這些文件?如何減少Github上的回購大小

注意:這些文件是前一段時間提交的,不在HEAD提交中。

+0

這裏真正的問題可能將被改寫,其他人都已經退出歷史 - 有很多帖子在這裏還有事情,你可以找到與谷歌處理該特定問題,除了我在答覆中提到的手冊頁部分。 – Cascabel 2009-10-20 19:34:59

+1

目前我是該項目的唯一提交者,所以它在這方面使事情變得更容易一些。 – 2009-10-21 00:10:51

回答

11

沒有辦法在不修改歷史記錄的情況下將其刪除,因此如果有人提出更改,則可能需要處理該混亂情況 - 請參閱recovering from upstream變更man git-rebase。這可能會非常糟糕,這取決於您的工作流程 - 無論如何,您可能必須讓每個人都意識到他們需要切換到「新」主分支,以重新分配正在進行的任何工作。

如果提交仍然在尖端上,你可以恢復到之前的承諾:

git reset --hard HEAD^ 

或修正:

git rm test.wav 
git commit --amend 

但因爲它不再是在頂端,你最好的辦法可能是可能與一個交互式的rebase做到這一點:

git rebase -i <commit-before-mistake> 

更改「選擇」的「編輯」承諾你想修復,然後擁有它! (或者甚至是刪除整個承諾,如果可以的話)*

你完成這樣無論這些你選擇之後,你必須強制推,因爲它不再是一個快進:

git push -f origin 

*如果您後來對這些文件進行了修改,您會在繼續進行轉置時遇到問題。他們應該直截了當地處理,因爲你只是想要文件消失。當然,如果自那時以來有100次提交都會導致衝突,那麼可以看看git-filter-branch。從man page相關的例子是:

git filter-branch --index-filter ’git rm --cached --ignore-unmatch filename’ HEAD 

2
  1. 將它從您所在分支機構的本地歷史記錄中刪除。一種方法是使用git commit --amend,如果這是您的HEAD提交;另一種是git rebase --interactive
  2. 強制將更新的分支推送到github。

    git push --force github 
    

    (其中github是GitHub的遠程名稱)。

這會將其從活動歷史中刪除。要真正回收空間,GitHub需要做垃圾回收。我不確定如何明確地做到這一點,如果他們不自動做。您可能需要提出支持請求。

+6

GitHub垃圾收集每個存儲庫操作後。 – 2009-10-21 16:56:29

+0

@JörgWMittag - 你確定嗎?我從舊的大文件清理它們並在github上推分支,我的回購仍然是相同的大小。當地的回購已縮小。 – isapir 2015-06-21 07:22:51