本文做者:Apollo開發者社區javascript
Git是一款免費、開源的分佈式版本控制系統,能夠敏捷高效地處理任何或小或大的項目。java
在項目實際開發過程當中,可能因爲疏忽,上傳了一些敏感信息,例如測試的帳戶名與密碼,可是後續的工做須要將項目公開,爲了不信息泄露,那麼必須清除Git的提交歷史記錄。git
本文由社區榮譽佈道師——賀志國撰寫,對Git刪除本地任意提交記錄的方法進行了詳細講解,但願這篇文章能給感興趣的開發者帶來更多幫助。分佈式
如下,ENJOY 測試
使用git管理代碼版本時,有時須要刪除一些本地錯誤提交的記錄,若是待刪除記錄是最後一條或N條記錄,操做很簡單,使用以下命令便可:spa
1# 刪除本地最後一條記錄,若是須要刪除最後提交的N條記錄,將「1」替換爲一個具體的數字「N」便可。 2git reset --hard HEAD~1
但生活每每不會太過於簡單,有時咱們會須要刪除提交記錄中的某幾條,例如,使用git log命令(小提示:可使用git log --oneline查看精簡的提交記錄)查看獲得的提交記錄以下:3d
1# 顯示每次修改的文件列表及修改狀態 2git log --name-status 3# 顯示每次修改的文件列表 4git log --name-only 5# 顯示每次修改的文件列表及文件修改的統計 6git log --stat 7# 顯示每次修改的文件列表 8git whatchanged 9# 顯示每次修改的文件列表及統計信息 10git whatchanged --stat 11# 顯示最後一次的文件改變的具體內容 12git show
須要刪除圖中用藍色框標註的兩條記錄,這時該怎麼辦呢?版本控制
首先找到最後一條待刪除記錄的前一條記錄ID,a8547a8beb2a11efc80a0594ebb2da21ced10439(實際處理時不必寫這麼長,只寫前面幾位a8547便可,具體須要的長度沒法指定,肯定原則就是確保記錄ID能惟一標識),接下來執行以下命令:code
1git rebase -i a8547
會進入以下界面:blog
注意:1. 界面中的提交記錄是以堆棧顯示的,本地最後一條提交記錄顯示在最下方,最後一條待刪除記錄顯示在最上方;2. 界面是以vi打開的,編輯方法與vi命令相同。
根據前圖中的藍框標記,待刪除記錄的ID分別爲3dd131a、ec4a612。使用j、k上下移動到pick 3dd131a與pick ec4a612,再使用cw命令將行首的pick替換爲drop注意每完成一個替換操做,須要按下Esc鍵退出vi的編輯模式)。檢查確認後,按wq保存並退出,接下來就等待git爲咱們刪除上述兩條選中的提交記錄,順利完成後的提示以下所示:
可使用git log命令檢查確認上述兩條記錄已被刪除:
固然,也有可能會出現沒法刪除某條記錄的狀況,例如,刪除記錄2f18f01就會出現以下錯誤:
解決方法固然就是按照提示,要麼人工解決衝突後,使用git rebase --continue繼續變基,要麼就是使用git rebase --skip忽略問題(強烈不建議,由於極有可能沒法變基成功,即便成功也會出現很大的隱患),要麼使用git rebase --abort終止變基。
git rebase -i命令還能夠用來調整本地提交記錄的順序,方法很簡單,在以下界面中使用vi的操做命令修改提交記錄的順序,按wq保存退出便可: