本文介绍命令行中的 Git rebase 命令行操作,另有姊妹篇- Git 操作:rebase 详解(Android Studio)
官网:https://git-scm.com/docs/git-rebase
初始 temp 分支节点状态:
* c6d18af - (HEAD -> temp) d (2 分钟前)
* d585e8c - c (3 分钟前)
* c48536f - b (4 分钟前)
* afa3558 - a (5 分钟前)
* 7cdf608 - init (6 分钟前)
rebase 当前分支
修改当前分支的节点记录。如:删除节点、合并节点、修改节点的顺序等。
git rebase -i 7cdf608
(-i
后是要修改的节点之前的一个节点)
显示
pick 1c9941d a
pick da02660 b
pick 45131c5 c
pick 95d2fab d
删除节点
删除节点 d:
- 点击 i 进入编辑,将 d 的 pick 改为
d
- 点击 esc,退出编辑
- 输入 :,进入命令模式,输入 wq
完成删除,当前节点状态:init-a-b-c。
合并节点
合并 b、c 节点
- 点击 i 进入编辑,将 c 的 pick 改为
s
- 点击 esc,退出编辑
- 输入 :,进入命令模式,输入 wq
- 进入 commit 信息编辑
- 输入 :,进入命令模式,输入 q
完成合并,当前节点状态:init-a-b。
修改节点的顺序
调换 a、b 的顺序
- 移动光标至 a 的一行,点击 dd,剪切 a 的一行
- 移动光标至 b 行的下面,点击 p,粘贴 a 的一行
- 点击 esc,退出编辑
- 输入 :,进入命令模式,输入 wq
完成修改,当前节点状态:init-b-a。
rebase 当前分支和其他分支
git rebase [–onto <新基线>] [<上游>] [<分支>]
没有指定分支,则默认是当前分支。指定后,会先 checkout 到指定分支,再进行 rebase。
没有指定新基线,则默认是上游。
含义:
将[分支] reset 到新基线上,再把原分支多于上游的部分移植过来
例子
-
在 temp 分支,执行
git rebase master
相当于执行
git rebase --onto master master temp
将 temp reset 到 master 的节点,再把原 temp 多于 master 的更新内容移植过来。
-
在 temp 分支,执行
git rebase --onto master temp temp2
切到 temp2 分支,将 temp2 reset 到 master 的节点,再把原 temp2 多于 temp 的更新内容移植过来。
abort rebase
git rebase --abort