我意外地提交了一個大的zip文件並推送到bitbucket。如何從git repo中刪除以前提交的文件?
現在,我已將該文件添加到.gitignore
並使用git rm --cached
刪除它並提交刪除該文件。
但是,當我git checkout
以前的提交,大的zip文件仍然存在。這意味着它仍然在git回購中。
我怎樣才能完全刪除這個大的zip文件?
在此先感謝。
我意外地提交了一個大的zip文件並推送到bitbucket。如何從git repo中刪除以前提交的文件?
現在,我已將該文件添加到.gitignore
並使用git rm --cached
刪除它並提交刪除該文件。
但是,當我git checkout
以前的提交,大的zip文件仍然存在。這意味着它仍然在git回購中。
我怎樣才能完全刪除這個大的zip文件?
在此先感謝。
因爲在包含大二進制文件的提交之前只有一個提交,所以您可能可以避免交互式重定位。
首先,核彈的第二次提交所做取出大型二進制文件:
git reset --hard HEAD~1
這使你在完全相同的狀態你是當你剛剛犯了大的二進制文件。
現在,在這一點上,大的二進制文件應該再次出現在本地。刪除此文件,然後將該更改添加到索引,如果Git尚未爲您完成。
最後,修改壞提交經:
git commit --amend
爲推動這個分支才能到位桶,你將不得不力推因爲你改寫了歷史:
git push --force origin feature
記住,強制推送重寫遠程歷史記錄,這可能會導致共享該分支的任何其他人遇到問題。在你的情況下,做這可能是超重的好處,有一個巨大的二進制文件是你的歷史的一部分。
如果你的核心提交只添加了大的二進制文件,這看起來好極了。如果它還做了其他任何事情'git reset --hard HEAD〜1'會失去它。如果沒有'--hard','git reset HEAD〜1'會更安全嗎? – dumbledad
是@dumbledad其他文件與大二進制文件一起提交 –
@dumbledad提交我建議nuking只刪除大二進制文件AFAIK,所以沒有真正的工作會丟失。然後,在從文件系統中刪除二進制文件後,剩下的提交文件將被_amended_。 –
最安全和可能最乾淨的方法是交互重新分配。
git rebase -i HEAD^^
或者,
git rebase -i your-commit-no^
從那裏你可以壁球承諾,這使一個或多個一起提交到上一次提交。要從歷史記錄中完全刪除提交,請從列表中刪除該行。
您可以還原與
git revert
但它要增加更多的提交信息的歷史,這可能是不可取的提交。使用-n參數告訴Git不要立即提交恢復。您可以交互重新組合,並將它們壓縮到之前的提交以保持乾淨。
如果您在這裏使用的兩個提交會影響相同的文件,您可能會看到合併衝突。
重置存儲庫
git reset --hard
應特別小心,因爲它不能被撤銷。
重寫歷史記錄應小心謹慎。
即使在交互式底座中,他仍然可能會刪除HEAD提交。 –
'git revert'使歷史中的提交(和大文件)保持不變。 – Melebius
自從包含大二進制文件的提交以來,已向該分支添加了多少個提交?最簡單的選擇可能是修改該提交,並刪除該文件。 –
@TimBiegeleisen只有一個。第二次提交添加了大文件。最後一次提交刪除大文件。 –
@TimBiegeleisen嗯..如何修改?通過使用'git revert'? –