git rebase的使用方式

4,317 阅读2分钟

方式一:两个分支之间的合并

远程分支和本地分支:git rebase 在没有参数的情况下,默认是git rebase 远程分支 本地分支

使用场景:小A和小B共用一个远程分支,小B提交了几次代码,当小A想要提交代码时,发现有冲突;

如果小A执行git pull并解决冲突,之后git add -> git commit,此时git log会出现一条merge的记录,类似

image.png

如果使用git rebase,在git log的记录里,没有Merge相关的commit,整个提交历史是一条直线。原理就是git会把我们当前的提交移到push之后

其他分支和当前分支:git rebase 其他分支 本地分支

使用场景:和上面类似,只是这个是将其他分支作为变基的基础,作用相当于git merge 其他分支 本地分支,但是少了Merge的commit

方式二:部分分支的合并

git rebase --onto 其他分支 本地分支 本地分支的子分支

--onto可以将本地分支的子分支合并到其他分支上,本地分支和本地分支的子分支之间的提交,不会出现在git rebase之后的提交中

使用场景:

  1. 从master分支切出feature1和feature2
  2. feature2 commit了3次
  3. 从feature2新切一个分支feature2/child
  4. feature2/child commit了1次 执行git rebase --onto feature1 feature2 feature2/child

只会合并feature2/child commit的那1次,不会携带 feature2 commit的3次

方式三: 修改一个分支上的某些提交

git rebase -i startCommitID

使用场景:如果想修改某个或某些commit,可以使用这个命令,最好是在当前代码还没有push到远程分支时使用;

每个commitId前面都有一些命令,修改这些命令可以合并commitId,删除commitId,修改commitId;

第一行不能使用s命令

比如git rebase -i 2a5eb63,会展示2a5eb63之后的commit,可以根据提示对这些commitId进行操作

image.png

需要注意的是,如果已经push到远程分支,再次push的时候可能会提示首先需要git pull,此时需要执行git push -f命令

最后,需要注意,在每次解决完冲突之后,都需要git add - > git rebase --continue(或者其他命令)