NJZY'S BlOG

Git Rebase指令详解

November 16, 2019

最近发现 git log 中有很多无用信息,分支也比较繁琐。所以在想有没有什么指令可以让 commit 记录看起来清晰明了,经过学习发现 git rebase 可以解决此问题。

在深入了解 git rebase 之前,先回顾一下常用的一些指令。

常用指令

仓库初始化

git init

克隆远程仓库

git clone

添加上游仓库

git remote add

分支的创建、删除、切换和合并

git branch
git branch -d
git checkout
git merge

修改文件添加到本地仓库

git add
git commit

拉取远程更新

git fetch

本地仓库的更新和上传

git pull
git push

分支提交历史和状态

git log
git status

分支回滚

git revert
git reset

git rebase 详解

git rebase 主要可以解决以下问题:

  1. 合并分支
  2. 合并多次 commit 记录

合并分支

假设我们目前有masterdev两个分支,其中 master 和 dev 分支上各有一次提交,状态如下:

1

此时如果需要将 dev 上的分支内容合并到 master,我们一般会进行如下操作:

git merge dev

合并之后状态如下:

2

此时执行git log,日志如下:

700c335 (HEAD -> master) Merge branch 'dev'
3c439fa add t2
ec8e71c (dev) add t1
00dbbcd change message
e61090f add index.js

我们会看到虽然成功合并了,但产生了一次新的 commit 提交,这个 commit 是自动生成的,那么有没有办法避免掉这次新提交,这是有git rebase就派上用场了。

执行以下操作:

git rebase master dev

此时状态如下:

3

执行 git log,日志如下:

b11f2fb (HEAD -> dev) add t1
64e3df4 (master) add t2
00dbbcd change message
e61090f add index.js

可见 commit 记录非常清晰。

合并多次 commit 记录

有时候我们开发一个功能可能需要多次 commit,当合并到 master 分支后,这些 commit 记录也会全部存在,那么有没有办法整理这些 commit,使其变成一次 commit,这样也方便以后的代码 review。

首先在没使用 git rebase 之前,假设 dev 上有三次提交,状态如下:

4

接下来我们尝试合并这些 commit:

git rebase -i HEAD~3

状态如下:

5

可见 git rebase 的 commit 合并功能十分好用。

参考链接