文章目录
- 作用
- 应用场景
- 场景一:交互式变基(合并同一条线上的提交记录) —— git rebase -i HEAD~2
- 场景二:变基(合并分支) —— git rebase [其他分支名称]
- 场景三:本地分支与远端分支的变基
作用
- 使git的提交记录变得更加简洁
应用场景
场景一:交互式变基(合并同一条线上的提交记录) —— git rebase -i HEAD~2
-
对象:版本库中的本地分支
-
git rebase -i HEAD~2 #将head标签当前最近的2次提交合并成一个提交,如下图所示:
-
注意要合并的提交里面不能包含已经上传到远端仓库的提交,如图中远端仓库的最新提交一直处于"第一天提交的位置"
-
为啥叫交互式?
- 之所以被称为交互式变基(interactive rebase),是因为这个命令让用户可以以交互方式控制变基过程中要如何处理每个提交。当你使用 -i 参数时,Git 会打开一个文本编辑器,列出你指定的提交历史,并允许你对这些提交进行各种操作。
-
注意:再次强调:要合并的提交里面不能包含已经上传到远端仓库的提交;
git rebase -i HEAD~2 #将head标签当前最近的2次提交合并成一个提交
- 编辑合并过后提交的commit message
git log #查看提交记录
场景二:变基(合并分支) —— git rebase [其他分支名称]
- 对象:版本库中的本地分支
- 1.切换到当前分支
- 2.git rebase [其他分支名称]
- 3.就会将当前分支的提交应用到其他分支的最新提交上
- 注意:1.最终被修改的还是当前分支; 2.应用到其他分支的提交为当前分支跟其他分支共同祖先的后续提交;
- 例如下图
- 主线和分支一的共同祖先是”第二天提交“
- 在分支一使用git rebase 主线以后,会将"第三天提交"应用到主线的最新提交上面,即第四天后面;
- 最后将结果保存在分支一上面,主线分支不变;
场景三:本地分支与远端分支的变基
- 对象:版本库中的本地分支和远端分支
- 本质相当于把远端的分支拉取到版本库中,然后使用git rebase 远端分支:基于当前head所在分支,变基到本地版本库中的远端分支标签所在的分支
# 本地分支:master
git fetch origin dev # 拉取远端dev分支到本地版本库
# git log --oneline --graph --all 可以通过该命令产看版本库中origin/dev的支线状态
git rebase origin/dev # 将master分支上的提交应用到origin/dev的最新提交上面
- 初始状态
- 执行git fetch origin master # 拉取远端dev分支到本地版本库
- 执行git rebase origin/master