解決git不小心提交大文件導致無法提交問題


在一次不小心向GitHub提交了一個1GB文件后,出現一個令人崩潰的錯誤:

remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: Trace: a22b6b202ddb6da3e2795ca71663de19
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File system_status/test_26457 is 1024.00 MB; this exceeds GitHub's file size limit of 100.00 MB

更崩潰的是,在此之后又進行了幾次提交,可不能因為這次手誤丟掉幾次提交成果呀。
在網上瀏覽一圈后找到解決方法:

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch system_status/test_26457'

大概原理是,刪除大文件,重新生成commit,但運行后又出現問題:

Cannot rewrite branches: You have unstaged changes.

之后找到一種較為暴力的解決方法:

git stash

在網上找到關於這段命令(git 儲藏)的使用場景:

  • 發現有一個類是多余的,想刪掉它又擔心以后需要查看它的代碼,想保存它但又不想增加一個臟的提交。這時就可以考慮git stash。
  • 使用git的時候,我們往往使用分支(branch)解決任務切換問題,例如,我們往往會建一個自己的分支去修改和調試代碼, 如果別人或者自己發現原有的分支上有個不得不修改的bug,我們往往會把完成一半的代碼commit提交到本地倉庫,然后切換分支去修改bug,改好之后再切換回來。這樣的話往往log上會有大量不必要的記錄。其實如果我們不想提交完成一半或者不完善的代碼,但是卻不得不去修改一個緊急Bug,那么使用git stash就可以將你當前未提交到本地(和服務器)的代碼推入到Git的棧中,這時候你的工作區間和上一次提交的內容是完全一樣的,所以你可以放心的修Bug,等到修完Bug,提交到服務器上后,再使用git stash apply將以前一半的工作應用回來。
  • 經常有這樣的事情發生,當你正在進行項目中某一部分的工作,里面的東西處於一個比較雜亂的狀態,而你想轉到其他分支上進行一些工作。問題是,你不想提交進行了一半的工作,否則以后你無法回到這個工作點。解決這個問題的辦法就是git stash命令。儲藏(stash)可以獲取你工作目錄的中間狀態——也就是你修改過的被追蹤的文件和暫存的變更——並將它保存到一個未完結變更的堆棧中,隨時可以重新應用。

解決后,再次修復,重新提交,完成!

$ git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch system_status/test_26457'
Rewrite 11983344a8934d6e9a7a1e225e6d0f6daf3923a4 (15/21)rm 'system_status/test_26457'
Rewrite 49ac22cd47b0504350d3643ff77b09b14f01ed03 (16/21)rm 'system_status/test_26457'
Rewrite 8a721565399d929514e3ed4661ea7c938074eb32 (17/21)rm 'system_status/test_26457'
Rewrite 6e9e291690bdd9923daef62a18d08229dc30a320 (21/21)
Ref 'refs/heads/master' was rewritten
$ git push

參考文獻


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM