2016-11-30 64 views
1

不知怎的,我有一個非常大的本地存儲庫,因爲我偶然添加了超過2 GB的文件,並且沒有想過試圖推動這個。我中止,刪除的文件,做了再犯,但是當我嘗試git push origin master到到位桶,它失敗:Git - 如何重置「推」

fatal: The remote end hung up unexpectedly 

我的git的文件仍然是巨大的,即使我已經很久以來刪除不需要的文件。由於推送超過2 GB,Bitbucket說我需要將http.postBuffer設置爲更高的數字。我已經做了這麼多次,但是經過大約15次嘗試之後,我想重新開始。

git status給了我這樣的:

On branch master 
Your branch is ahead of 'origin/master' by 4 commits. 
    (use "git push" to publish your local commits) 

但由於推從來沒有工作,我該如何解決?最壞的情況下,我可以爆炸回購和重建它,但我想知道是否有一種方法來重置推,因爲它保持失敗。

+1

你是如何「刪除不需要的文件」底墊?這是一個版本控制系統,它也保留較舊版本(包括已刪除的文件)。您需要重寫歷史記錄以完全擦除任何記錄(然後可能會進行垃圾回收)。 – Thilo

+1

[如何從Git存儲庫中的提交歷史中刪除/刪除大文件?](http://stackoverflow.com/questions/2100907/how-to-remove-delete-a-large-file-from- commit-history-in-git-repository) – Thilo

+0

這個問題在這裏經常會出現,但你可以使用'git filter-branch'或'git rebase -i'來移除那些錯誤的提交。立即這樣做,所以他們不會被進一步埋葬。 –

回答

2

的提交做到這一點你可以提交-ID weigreen’s answer將有助於有問題的提交是最近的一次,在其他情況下,您需要rewrite the history。我更喜歡交互式底線

git rebase -i <some-commit-before-the-problematic-one> 

它將與默認的動作一起顯示提交的名單pick它們,因爲它們。如果您想保留有問題的提交的一部分,請在該行上將pick更改爲edit。如果您想要刪除它,只需刪除該行即可。如果您選擇編輯該提交,Git會將工作樹置於狀態,就像剛剛完成有問題的提交一樣。改變你需要什麼,修改承諾:

git commit --amend 

之後,讓Git的使用完

git rebase --continue 
+0

這會效果最好。我最終做了一個硬重置,然後強行推。如果我尚未完成硬重置,您的解決方案會更好。:( – Tensigh

+0

@Tensigh在運行'git gc'之前,仍然可以使用'git reflog'來訪問已刪除的參考文件 – Melebius

+0

好的,謝謝。現在我明白了,我該如何回滾? – Tensigh

1

您可以通過git reset

git reset --hard <commit-id> 

使用git log

你將失去​​頭之間所有的工作,你選擇

+1

我認爲互動式底線會更有意義。使用rebase可以保留以後的工作。 rebase和你的答案都會重寫分支的歷史,所以從這個角度來看,這兩種方法都不會更好。 –

+0

這不會對任何其他可能包含巨大文件的分支或標籤執行任何操作。 – Thilo