git rebase
git rebase 可以帮助项目中的提交历史干净整洁!!!
一.自动合并多个commit记录
命令
git rebase -i [startpoint] [endpoint]
其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。
git rebase -i HEAD~3
上面代码的意思是合并最近三次提交的记录
eg
当前提交如下
现在要合并test1,test2,test3这三个提交,先执行命令
git rebase -i 2ba7d98a a205cfb2
或者
git rebase -i 2ba7d98a
或者
git rebase -i HEAD~3
这三个命令都可以,提交完后弹出如下页面
上面未被注释的部分列出的是我们本次rebase操作包含的所有提交,下面注释部分是git为我们提供的命令说明。每一个commit id 前面的pick表示指令类型,git 为我们提供了以下几个命令:
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)
- 首先,输入i命令,进入编辑模式。
- 我们需要关注的是最上面几行以pick开头的信息。需要把除了第一行外的pick改成s。
- 然后按esc键退出输入模式,输入:(英文冒号)进入底线命令模式
- 再输入wq 即保存后退出
在vim编辑框进行操作,一般有下面两种
两种的区别就是test1那里一个是p,一个是r,两种都可以,根据具体需求去操作
然后按下“esc”键,退出编辑,然后输入“:wq” 保存修改
如果test1选择了r,会弹出如下编辑commit的界面
对test1进行编辑,写一个总的提交commit,
然后按下“esc”键,退出编辑,然后输入“:wq” 保存修改,如下图
继续按下“esc”键,退出编辑,然后输入“:wq” 保存修改
此时查看提交记录,已经变成了一条
二.避免合并出现分叉现象git merge操作
eg 在dev分支有两个提交V1,v2,在test分支有两个提交V3,v4,如果用merge合并,就会是下面这样
在合并的时候就会产生分支的效果
下面用rebase看看是啥效果
先把代码切换到合并的分支(这里是test),然后执行 git rebase test
git checkout test
git rebase dev
此时的合并记录如下
提交的记录就在一条线上了
继续上面的提交,如果git rebase dev的时候有冲突怎么办,现在两个分支改了同一个文件,有冲突了,如下
要做的是先解决冲突,然后执行代码
git add . git rebase --continue
后面的步骤就和git rebase的操作相同了