关于变基 github 文档的原文在这里
和 git merge 用途一样, git rebase 也是用来合并分支的
先看这个:
图片来源:点击这里
下面做分解
![图1](https://i-blog.csdnimg.cn/blog_migrate/a000376a4d8ad2fc4c862416f1d5772b.png)
图1示例了一个 feature 开发分支从主支 master 的 B 提交上拉出来并且进行了 C 和 D 两次提交,然后 master 分支合并了一个新的提交 M ,此时我们在 feature 上执行命令:
git rebase master
执行完毕后会变成下图:
![](https://i-blog.csdnimg.cn/blog_migrate/4869b94e32acd07885bdac205cb8057d.png)
解释一下图2发生了什么: feature 分支执行rebase命令后,会和 master 分支一起找到公共祖先也就是 B 随后将自己基于祖先 B 生成的提交 C 和 D 截断,保存提交内容,删除掉两个提交的commit id,然后取回目标分支也就是 master ,将保存的内容应用到 master 上生成两个新的提交记录,需要注意的就是commit id完全不同。
变基的最大的好处是重写历史,下面这个命令允许你以交互式操作对多条记录进行合并和修改
git rebase -i
比如当我们想要修改最近提交的三条记录,我们在命令后跟条件执行:
git rebase -i HEAD~3
此时会进入到一个编辑器界面,并列举了你最近的三条记录,并且在记录下面介绍了你可以对其执行操作的几种命令缩写和全拼解释
- p 保留提交不做修改
- r 修改注释
- e 修改提交
- s 将该提交合并到前一个提交上,并保留这个提交信息
- f 和 s 一样的效果只是不保留当前提交的提交信息
- x 给每一个提交打开一个shell
- d 丢弃该提交
动图简单易懂,对于历史提交记录的整理真是太好用了
解决冲突:
github 文档的原文在这里
首先解决冲突文件
然后执行以下命令
git add .
git rebase --contine
另外的两种命令
git rebase --abort
放弃,完全撤销,回到rebase之前的状态
git rebase --skip
这个命令完全用不到,文档里都说这个用的少。
注意点
前面提到变基的最大的好处是重写历史,但是最危险的也是重写历史,因为修改历史中某一个提交会把当前的提交包括后续的所有提交都全部放弃然后重新生成新的commit 所以
不要在 master 上进行变基
不要对推送以后的分支进行变基