现在我们在分支 b 上,然后 rabase 到分支 a 上。如图所示:
平时开发中经常遇到这种情况,假设分支 a 和 b 是两个独立的 feature 分支,但是不小心被我们错误的 rebase 了。现在相当于两个 feature 分支中原本独立的业务被揉起来了,当然是我们不想看到的结果,那么如何撤销呢?
一种方案是利用 reflog 命令。
利用 reflog 撤销变基
我们先不考虑原理,直接上解决方案,首先输入 git reflog,你会看到如下图所示的日志:
最后的输出其实是最早的操作,我们逐条分析下:
HEAD@{8}: 这里我们创建了初始的提交
HEAD@{7}:检出了分支 a
HEAD@{6}:在分支 a 上做了一次提交,注意 master 分支没有变动
HEAD@{5}:从分支 a 回到分支 master,相当于向后退了一次
HEAD@{4}:检出了分支 b
HEAD@{3}:在分支 b 上做了一次提交,注意 master 分支没有变动
HEAD@{2}:这一步开始变基到分支 a,首先切换到分支 a 上
HEAD@{1}:把分支 b 对应的那次提交变基到分支 a 上
HEAD@{0}:变基结束,因为是在 b 上发起的变基,所以最后还切回分支 b
如果我们想撤销此次 rebase,只要输入以下命令就可以了:
git reset --h