在idea上实现git rebase操作

git小技巧

1git rebase  —onto

把某个分支的某一段commit记录rebase到基点分支上

在idea上实现git rebase操作_第1张图片

 

2ideagit rebase的各参数的含义

C分支:当前分支(必须是分支)

A分支:基点(可以是分支,也可以是commit节点)

B分支:起点  (可以是分支,也可以是commit节点, 如果是commit节点,就找到当前分支最新commit跟这个起点commit节点之间所有的节点,rebase到基点上, 这个起点必须在当前分支上,如果不在,那么这个起点就没有意义了,就相当于直接把C分支rebase到A分支上)

对应着idea中参数的解释

 

 

 

3ideagit rebase -i 

合并一个分支中多次commit提交

在idea上实现git rebase操作_第2张图片

合并1,3这两次commit

在idea上实现git rebase操作_第3张图片

注:第一个commit的action不能是squash、fixup,最好是pick。

在idea上实现git rebase操作_第4张图片

大致介绍一下每个action的含义

在idea上实现git rebase操作_第5张图片

第一类:保留commit,不合并

pick:   标记为pick的commit会在rebase操作后会直接保留下来,不做任何改动,也不会合并,最上面的commit最好标记为这一类

reword: 这一类commit也会保存下来,不过在保存下来之前会有一次修改commit message的机会

edit:这一类的commit也会直接保存下来,不过,当合并到这种类型的commit时,整个合并经常会暂停下来,你可以重新修改这次commit中的变动内容,比如给这个commit继续新增一些代码改动、或者修改commit message,然后git add(不要忘记 git add了), 再继续使用git rebase —continue,来继续rebase操作。

 

第二类:不保留commit,与上一次commit合并

squash: 标记为squash的commit在rebase操作完成后不会保留,它会与之相邻的上一次commit进行合并。同时它的commit message也会与上一次commit的message合并。

fixup: 这类commit不会保留,会直接与相邻的上一次commit合并,与squash不同之处在于,它的commit message回直接丢弃,即这次commit会被视为对前一次commit的一次小的补充修改(fixup),commit message就以前一次为准

 

第三类:不保留,直接删除commit

skip:标记为skip的commit会直接被删除,就相当于这次commit从来没有发生过。同时,这个commit中涉及的所有代码修改全部会被删除。

 

 

skip举例(重要!!):

commit1: 新增一个test.txt文件,并插入一条记录a

在idea上实现git rebase操作_第6张图片

 

commit2: 新增一个test_2.txt文件,并插入一条记录b

在idea上实现git rebase操作_第7张图片


commit3:新增一个test_3.txt文件,并插入一条记录c

在idea上实现git rebase操作_第8张图片

 

然后我们来rebase合并这三次commit,保留1和3 , skip2,看看结果会怎样?

在idea上实现git rebase操作_第9张图片

结果:

commit2中涉及到的所有改动全部被删除了,test_2.txt删除了,只留下test.txt和test_3.txt。

在idea上实现git rebase操作_第10张图片

你可能感兴趣的:(IT,大数据,大数据,git,编辑器,intellij,idea)