date:
updated:

重新认识git【其六】变基


rebase 是一种不产生分叉的 merge, 相当于把当前分支接到目标分支的后面, 所谓的基即是”基底分支”, 变基即是”变换基底分支”, 相当于把目标分支作为当前分支的基底分支。

变基使得提交历史更加整洁, 成一条直线, 不会产生难看的分支。

基础的变基操作流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 更旧的分支 -- experiment
\ master

git checkout experiment # 当前分支
git rebase master # 目标分支
# 相当于
git rebase master experiment # 不需要切换分支


# 更旧的分支 -- master -- experiment
# 此时 master 分支需要再进行 merge 来与 experiment 合并

git checkout master
git merge experiment

最终 experiment 和 master 分支都指向同一个提交(最后的提交)

–onto

1
2
# 取出 client 分支,找出它从 server 分支分歧之后的补丁, 然后把这些补丁在 master 分支上重放一遍,让 client 看起来像直接基于 master 修改一样
git rebase --onto master server client

避免协作时推送rebase

与他人协作时需要谨慎使用变基操作, 最后只对不会离开你电脑的提交执行变基

比如你推送了经过变基的提交,并丢弃了别人的本地开发所基于的一些提交, 他可以使用变基来解决你的变基, 但这会让事情变得复杂

1
2
3
4
git pull --rebase
# 或者
git fetch # 拉取你的代码一看, 干, 你变基了, 我本地开发的"基"被你丢弃了
git rebase master # 把自己的代码变基到你变基的提交上面, git 会自动识别

onto指令和协助变基操作比较难理解, 以上是我简化的理解, 可以参考原文


← Prev 移动端适配整屏滚动页面【以秀米为例】 | 重新认识git【其五】分支 Next →