2010-02-24 86 views
6

我不小心提交了log/test.log,但從未推送它。此後我做了一個混帳rm來擺脫它。但是當我嘗試推送時,我仍然收到大量試圖傳輸的數據。 git rm不應該解決這個問題。如果沒有,我該如何解決?刪除大文件後git push

回答

11

不要恢復提交,然後推送,因爲巨大的文件仍然會在歷史中傳播。

既然你還沒有推開它,要重做是最近的,請從你的歷史,提交承諾:

$ git reset HEAD^

這將你的索引返回它的狀態在父提交(HEAD^)中。現在你已經有了一個夢想:第一次添加和實現你的意思。

如果您已經做了其他後續提交,您需要git rebase -i <commit>其中<commit>是bad commit的父代的SHA-1。

例如(並注意SHA-1將在您的回購不同)

$ git rebase -i 57d0b28

將下降在類似於

pick 366eca1 This has a huge file 
pick d975b30 delete foo 
pick 121802a delete bar 

# Rebase 57d0b28..121802a onto 57d0b28 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# However, if you remove everything, the rebase will be aborted. 
#

編輯與edit上與線替換pick重承諾

edit 366eca1 This has a huge file 
pick d975b30 delete foo 
pick 121802a delete bar

保存並退出你的編輯器返回到您的外殼,在那裏你會看到形式

Stopped at 366eca1... This has a huge file 
You can amend the commit now, with 

    git commit --amend 

Once you are satisfied with your changes, run 

    git rebase --continue

從那裏的消息,刪除有問題的文件

$ git rm --cached big-nasty-file 
rm 'big-nasty-file'

修改(--cached只從指數中刪除文件)提交

$ git commit --amend

,並完成底墊

$ git rebase --continue
+0

你如何獲得的SHA1地址,請提交? – Daniel 2010-02-25 03:48:57

+0

@Daniel運行'git log'或'gitk',例如。 – 2010-02-25 11:26:38

2

如果您尚未推送,則可以使用git rebase -i編輯提交歷史記錄,同時刪除addrm。一個警告是,你必須小心不要編輯任何已經推送的提交。

http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive

你問你是否仍然可以做到這一點,如果有在提交和其他提交以下這一個其他的變化。這取決於。您應該能夠編輯/刪除任何未完成的提交,而不僅僅是最新的提交。但是如果以後的更改很大程度上依賴於已刪除的提交的更改(例如,您添加了一個文件,然後在稍後的提交中對其進行了編輯),那麼rebase可能會失敗。如果你刪除一個提交,你將失去該提交的所有更改。我不知道從提交中刪除單個更改的方法。如果您不想丟失test.rb提交中的其他更改,則可以在刪除提交之前生成補丁(使用git show <commitid> > /tmp/patch或使用內置的git patch功能)。然後編輯您的補丁文件以刪除大的test.rb,但保留所需的更改,然後重新將補丁應用到頭部。

如果你有我前面提到的,其中底墊中失敗的問題(或者你認爲它會失敗),可以爲您節省補丁所有您提交的問題提交後,將它們全部刪除,而爲了重新申請他們。

+0

雖然我沒有推,因爲我已經做了多次提交。 rebase仍然是一個選擇嗎? (在與意外日誌/ test.rb提交了它一噸的文件) – Daniel 2010-02-24 15:28:36