2009-02-22 113 views
13

看來我最初的提交已經佔用了90%的空間,因爲它意外地獲得了很多媒體文件。有沒有辦法從本地和遠程回購中刪除第一次提交,或者我應該保留這個嗎?我可以從Git倉庫中刪除最初的提交嗎?

+1

還有`git rebase --root`。請參閱以下SO答案的詳細信息:http://stackoverflow.com/questions/2246208/change-first-commit-of-project-with-git – MKroehnert 2013-06-03 13:20:51

回答

20

聽起來好像您已經與其他許多用戶共享存儲庫。如果是這種情況,那麼你應該可以忍受它。

如果您控制了所有克隆,那麼您可以在修改的根提交之上重新編寫歷史記錄,並刪除意外的文件。請注意,如果其他開發人員已經完成了此分支的工作,則不應該這樣做。

如果您正在重寫歷史記錄,那麼您可以嘗試以下操作。請注意,因爲git會在日誌中記錄HEAD提交最近的日誌(reflogs),所以即使您嘗試使用git gcgit gc --prune,大型對象也不會立即從您的存儲庫或其他已存有它們的存儲庫中消失。但是,它將確保任何新的克隆都不會將大型對象作爲主分支歷史記錄的一部分。

假設你的工作目錄是「乾淨」:

# Go back the initial commit 
git checkout <SHA1_of_old_root> 

# Clean up the index to remove unwanted files, e.g. using git rm <files> 
# ... 

# Amend the initial commit with the new tree. Note the sha1 of the new commit 
git commit --amend 

# Go back to the master branch 
git checkout master 

# Re-apply all the commits onto the new root 
git rebase --onto <SHA1_of_new_root> <SHA1_of_old_root> 
2

或者您可以使用git filter-branch刪除有問題的文件(見示例部分),但它也改寫歷史。因此,任何基於他/她的代碼在你的舊歷史之上的人都會得到不好的驚喜......

+1

過濾分支也將應付更好(或至少需要更少的交互)如果自根提交以來,對不需要的文件進行了更改跟蹤。 – 2009-02-23 07:42:55