上篇文章说到,如果想从其他分支取某(几)个提交来合并,可以使用 cherry-pick 命令,那么如果这个分支想剔除这几个被 cherry-pick 出去的提交呢?这就要用到 git 中另一个强大的命令:rebase。
git rebase
rebase 命令可以改写某个提交之后的所有提交记录。
如何删除分支上某次提交
1. 找到要删除的提交的 commit hash
1 | git log --oneline |
假设要删除的 commit hash 为 A 和 B, A 早于 B。
2. 执行 rebase -i “commit hash”^ 进入编辑界面
注意后面的^符号不能少,这样就可以看到包括提交A的前面的所有提交。1
git rebase -i A^
3. 标记要删除的提交为 drop 或者 d
在 vi 编辑器里,将 A 和 B 的前面的 pick 改为 drop 或者 d。
4. Esc + wq 退出 vi 编辑界面
5. 执行 rebase –continue 完成 rebase
1 | git rebase --continue |
冲突处理
在 git rebase --continue
这个过程中,如果有代码冲突,会暂时中断 rebase,
我们处理好冲突后,执行 git add
把处理好的冲突文件添加进来,
然后再执行 git rebase --contine
,
循环往复直到从 A 到最新的提交都 reabase 完。
最后,可以使用 git log 命令检查一下 A 和 B 是否已经从该分支历史提交中剔除了。
done。