如现有提交历史: 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