如現有提交歷史: A->B->C->D->E->F,欲丟棄 C 以前的提交歷史使得歷史記錄變爲: C->D->E->F,則此時:git
基於 C 建立一個根提交,可使用 git commit-treeshell
將 D,E,F 變基到剛建立的根提交上.以下:spa
$ git log --oneline --decorate --graph # 當前提交歷史 * fdc7fff (HEAD, tag: F, master) F * d46f42d (tag: E) E * 6501e33 (tag: D) D * a0699ec (tag: C) C * b97d344 (tag: B) B * 7929c37 (tag: A) A $ git commit-tree -m 'C' tags/C^{}^{tree} # 建立一個根提交 7b99fe372d8324172f88b814ff1bdffac97338b8 $ git rebase --onto 7b99fe372d8324 C F # 執行變基操做. 首先,重置頭指針以便在上面重放您的工做... 正應用: D 正應用: E 正應用: F $ git status # 注意 git rebase 以後處於分離頭指針狀態. # HEAD detached from 7b99fe3 nothing to commit, working directory clean $ git checkout master # 切換到 master. 警告: 您正丟下 4 個提交,未和任何分支關聯: 4eb1223 F c5d1c66 E 9686a0e D 7b99fe3 C 切換到分支 'master' $ git reset --hard HEAD@{1} # 注意這一步. $ git status # 位於分支 master nothing to commit, working directory clean $ git log --oneline --decorate --graph # 成功刪除歷史 * 4eb1223 (HEAD, master) F * c5d1c66 E * 9686a0e D * 7b99fe3 C