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)

 

  1. 首先,输入i命令,进入编辑模式。
  2. 我们需要关注的是最上面几行以pick开头的信息。需要把除了第一行外的pick改成s。
  3. 然后按esc键退出输入模式,输入:(英文冒号)进入底线命令模式
  4. 再输入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的操作相同了

 

posted @ 2023-08-05 14:55  前端先锋  阅读(89)  评论(0编辑  收藏  举报