git rebase 算是git里的高级操作了,他主要用来解决两种情况。
- 有时候我们对于一个简单的需求提交了多次,这样非常不利于code review,所以我们需要将多次提交合并成一次提交。(即多次commit合并成一次commit)
- 你从master创建一个分支开发,然后你的同事又从master创建一个分支开发,但是他比你先提交,所以远程的master分支比你的本地master走的远,所以现在要将你的分支代码基于远程的master来实现提交
- 我们先创建一个文件test.txt,然后提交到master
文章图片
文章图片
- 我们创建一个分支rebasetest, 然后修改提交
文章图片
- 我们对这个分支的test.txt进行多次修改提交,分别添加b、c、d,提交b、c、d
文章图片
文章图片
- 接下来就要用git rebase来将提交a、b、c合并成一次提交
执行git rebase -i head~3命令,表示将最近的3次提交进行rebase操作,然后进入下面编辑界面,包含了最近3次提交的信息。
文章图片
我们将下面两次提交的pick操作改成s(是squash的缩写),代表将当前提交合并到上面的提交,然后保存退出(退出后进行合并可能产生冲突,这时候需要我们解决冲突,然后执行git add . 和git rebase --continue来继续rebase操作。具体的会在第二种情况有操作)。
文章图片
合并完成后就会转到下一个编辑界面,需要我们编辑提交的信息,默认为3次提交信息的合并
文章图片
这里我们修改一下提交信息,修改成最后一次的提交信息,即把b、c注释掉,然后保存退出
文章图片
我们再来看一下提交的日志,已经成功将3次提交合并
文章图片
【git rebase操作】我们回到master分支,然后修改test.txt,提交信息为e
文章图片
这个时候我们对比一下master和rebasetest两个分支的log信息,如下
文章图片
文章图片
我们看到,rebasetest分支是在master提交a后创建并修改的,但这个时候master已经有了e的提交信息,所以我们认为master分支走的比rebasetest分支远(在开发中,我们是以master为主要分支的,所有其他分支的代码都会合到master),所以我们需要先在rebasetest分支上执行rebase操作,然后再将rebasetest分支合并到master
文章图片
提示执行失败,那是因为自动合并时产生了冲突并进入了一个临时分支,我们看一下现在test. txt的内容
文章图片
所以现在我们需要解决冲突,解决冲突可以看我前面的文章,下面是我解决后的内容
文章图片
解决后,我们执行git add .保存修改,然后这些git rebase --continue 继续执行rebase操作
文章图片
当rebase操作完成后,我们会重新回到rebasetest分支,我们看一下现在的git log
文章图片
我们已经成功将master分支的修改合并到了rebasetest分支。现在我们将rebasetest分支的修改合并到master
文章图片
我们看到合并非常顺利,因为我们已经在rebase的时候解决了冲突,再来看一下git log
文章图片
log非常干净,根本没有合并分支的提交信息,这样就保证了提交的简洁,非常有利于查看提交信息和各个提交修改了什么。
git rebase --abort
当我们在执行rebase操作是,如果出现我们无法掌控我情况ian,可以随时执行git rebase --abort操作来取消rebase操作,就会恢复到rebase之前的状态
推荐阅读
- transformer|Swin-Transformer代码讲解-Video Swin-Transformer
- git使用技巧备忘(持续更新。。。)
- git 高级操作
- 同步GIT仓库的操作 -- pull命令
- git|git简单命令
- Git|Tomcat 自定义错误页面(例如404页面等等)
- 本地项目添加到gitee仓库管理
- centos|搭建Git服务器
- Git clone~fatal: protocol '?http' is not supported。解决办法。
- github开通,史上最全demo集合,各种demo持续更新中