2016-09-07 193 views
0

我意外地提交了一個大的zip文件並推送到bitbucket。如何從git repo中刪除以前提交的文件?

現在,我已將該文件添加到.gitignore並使用git rm --cached刪除它並提交刪除該文件。

但是,當我git checkout以前的提交,大的zip文件仍然存在。這意味着它仍然在git回購中。

我怎樣才能完全刪除這個大的zip文件?

在此先感謝。

+0

自從包含大二進制文件的提交以來,已向該分支添加了多少個提交?最簡單的選擇可能是修改該提交,並刪除該文件。 –

+0

@TimBiegeleisen只有一個。第二次提交添加了大文件。最後一次提交刪除大文件。 –

+0

@TimBiegeleisen嗯..如何修改?通過使用'git revert'? –

回答

2

因爲在包含大二進制文件的提交之前只有一個提交,所以您可能可以避免交互式重定位。

首先,核彈的第二次提交所做取出大型二進制文件:

git reset --hard HEAD~1 

這使你在完全相同的狀態你是當你剛剛犯了大的二進制文件。

現在,在這一點上,大的二進制文件應該再次出現在本地。刪除此文件,然後將該更改添加到索引,如果Git尚未爲您完成。

最後,修改壞提交經:

git commit --amend 

爲推動這個分支才能到位桶,你將不得不力推因爲你改寫了歷史:

git push --force origin feature 

記住,強制推送重寫遠程歷史記錄,這可能會導致共享該分支的任何其他人遇到問題。在你的情況下,做這可能是超重的好處,有一個巨大的二進制文件是你的歷史的一部分。

+0

如果你的核心提交只添加了大的二進制文件,這看起來好極了。如果它還做了其他任何事情'git reset --hard HEAD〜1'會失去它。如果沒有'--hard','git reset HEAD〜1'會更安全嗎? – dumbledad

+0

是@dumbledad其他文件與大二進制文件一起提交 –

+1

@dumbledad提交我建議nuking只刪除大二進制文件AFAIK,所以沒有真正的工作會丟失。然後,在從文件系統中刪除二進制文件後,剩下的提交文件將被_amended_。 –

0

最安全和可能最乾淨的方法是交互重新分配。

git rebase -i HEAD^^ 

或者,

git rebase -i your-commit-no^ 

從那裏你可以壁球承諾,這使一個或多個一起提交到上一次提交。要從歷史記錄中完全刪除提交,請從列表中刪除該行。

您可以還原與

git revert 

但它要增加更多的提交信息的歷史,這可能是不可取的提交。使用-n參數告訴Git不要立即提交恢復。您可以交互重新組合,並將它們壓縮到之前的提交以保持乾淨。

如果您在這裏使用的兩個提交會影響相同的文件,您可能會看到合併衝突。

重置存儲庫

git reset --hard 

應特別小心,因爲它不能被撤銷。

重寫歷史記錄應小心謹慎。

+0

即使在交互式底座中,他仍然可能會刪除HEAD提交。 –

+0

'git revert'使歷史中的提交(和大文件)保持不變。 – Melebius

相關問題