git rebase 的用法 | 七日打卡

365 阅读4分钟

楔子

近期罗大佬,在我们 wangEditor 团队中提出了一个非常好的意见,应该保持 commit 的整洁,使用 rebase ,这条建议很快就被纳入了团队开发规范了。
然而,在下对 git 的使用实在是拙计,仅仅只是了解一些常用的命令例如:add、commit、log、push、pull 等等,初次听闻 rebase 的时候是一脸懵逼,这是个啥玩意该怎么用?
后续,老大其实也分享了很多资料,甚至录制了个视频,我自己也查了一些资料,但是我始终还是有点不清不楚只是会简单的合并一下 commit ,经过一番磨难后,稍微能理解如何去 rebase ,所以做个笔记顺路分享一下。

假设

首先假设我们手上有个 feat-1 的分支,已经提交了很多 commit

  1. test: 444 -> head
  2. fix: 333
  3. fix: 222
  4. feat: 111

第一步:合并 commit

首先我们需要使用 git log --oneline 命令来获取日志记录,如下图所示:

接下来我们需要获取到需要合并到的哪一个 commit 的下一个 commit 的编号,如下图所示:

接下来使用 git rebase -i cbee450(commit 编号) 来编辑 commit ,输入后回车如下图所示:

这里我们可以看到下面命令的文档信息有 pick、reword、edit、squash、fixup、exec、break、drop、label、reset 等等;
这里我们只需要关注 squash (使 commit,但合并到上一个提交中) 即可;
按下 i 键进入编辑模式,把除了 feat: 111pick 修改成 squash 如下图所示:

然后按下 Esc 键结束编辑,输入 :wq 来保存修改并退出编辑,如下图所示:

正常情况下会进入编辑 commit message 的提示语当中,如下图所示:

非正常情况下可能需要合并冲突之类的,合并冲突后,需要去执行 git rebase --continue 继续下一步操作,如果合并的有问题,可以使用 git rebase --abort 中断这次 rebase 行为,恢复到开始时候的样子

同样按下 i 键进入编辑模式,然后删除不需要的 commit message ,修改完毕后按下 Esc 键结束编辑,输入 :wq 来保存修改并退出编辑,如下图所示:

那么至此,合并 commit 就已经完成了。

第二步:变基并提交

这一步才是重中之重,也是困扰我许久的位置。

准备操作

首先,我们需要切换到 主分支(main、master、dev) 也就是需要合并到的那个分支;
然后,把主分支的代码拉取为最新的后,切换回我们的开发分支 feat-111

变基

切换回我们的开发分支后,执行 git rebase dev dev 就是你需要合并到的那个分支

注意1:这个时候很可能大的可能需要去解决冲突,如果操作失误,导致设置失败,可以使用 git rebase --abort ,去终止这一次变基,还原到开始的时候
注意2:这个时候处理好了冲突,或者没有冲突的时候我们就要去执行 git rebase --continue 来继续变基的下一步操作,这里根据 commit 可能会要解决多次冲突,解决一下就要去执行 git rebase --continue 继续下一步操作

提交

到这里来了后我们就需要提交了,这个时候你会发现在无法正常的提交分支,因为分支已经的 commit 经过了修改,直接提交大概率会有冲突,如下图所示:

这个时候就需要点特殊手段了通过 -f 强行覆盖式的提交修改,执行 git push origin feat-111 -f 到这里,我们的 rebase 就完成了。

注意:-f 的操作很危险,所以提交之前,一定要确认好要提交的代码的正确性

总结

虽然几经磨难,但是最终还是学到新的知识。