git rebase 算是git里的高级操作了,他主要用来解决两种情况。

  1. 有时候我们对于一个简单的需求提交了多次,这样非常不利于code review,所以我们需要将多次提交合并成一次提交。(即多次commit合并成一次commit)
  2. 你从master创建一个分支开发,然后你的同事又从master创建一个分支开发,但是他比你先提交,所以远程的master分支比你的本地master走的远,所以现在要将你的分支代码基于远程的master来实现提交

第一种情况

  1. 我们先创建一个文件test.txt,然后提交到master

  2. 我们创建一个分支rebasetest, 然后修改提交
  3. 我们对这个分支的test.txt进行多次修改提交,分别添加b、c、d,提交b、c、d

  4. 接下来就要用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次提交合并

第二种操作

我们回到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之前的状态

git rebase操作相关推荐

  1. 解决git rebase操作后推送远端分支不成功的问题

    解决git rebase操作后推送远端分支不成功的问题 参考文章: (1)解决git rebase操作后推送远端分支不成功的问题 (2)https://www.cnblogs.com/xinmengw ...

  2. git rebase 后找回消失的commit

    git rebase 后找回消失的commit 在git rebase操作时,存在冲突时,使用git rebase --abort处理后,结果发现commit的修改和记录都没有了.(使用git reb ...

  3. Git rebase命令实战

    一.前言 一句话,git rebase 可以帮助项目中的提交历史干净整洁!!! 二.避免合并出现分叉现象 git merge操作 1.新建一个 develop 分支   2.在develop分支上新建 ...

  4. git rebase和git merge使用方法详解

    看了网上很多讲git rebase和git merge的文章,这里做下总结,其中主要参考了这两位大佬的博客,后面附上链接 https://blog.csdn.net/weixin_42310154/a ...

  5. git的学习笔记(一):git本地操作

    1.Git介绍 Git是一个开源的分布式版本控制软件,用以有效.高速的处理从很小到非常大的项目版本管理. Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发. Git ...

  6. Git rebase 和 merge讲解

    git合并代码方式主要有两种方式,分别为: 1.merge处理,这是大家比较能理解的方式. 2.rebase处理,中文此处翻译为衍合过程. 先来两张合理使用rebase,merge和只使用merge的 ...

  7. Git rebase(变基)操作详解

    目录 简单变基操作 复现 变基 更复杂的变基 复现 变基 变基操作建议 简单变基操作 复现 先复现一个变基操作的现场,具体做法如下: (1)创建一个testrebase目录,在该目录下执行git in ...

  8. git rebase(变基)操作演示

    1.rebase(变基)操作 注意事项:rebase 改变分支的根源,绝对不要在与其他人共享的分支上进行操作rebase黄金法则:绝不要在公共的分支上使用它! 1.1git merge 与 git r ...

  9. 关于Git的rebase操作与cherry-pick操作的建议

    缘起 最近一次新疆采编发版时,发现代码中有一处配置的一个变量没有了,经过查询Git的提交历史发现这次改动涉及的提交bbb的作者是开发人员A,但A君表示从来没有动过这块代码. 这就很奇怪了,明明Git上 ...

  10. Git合并操作之merge、rebase、squash详解

    文章目录 1 git merge和git rebase 1.1 git merge 1.2 git rebase 1.2.1 rebase交互模式 1.2.2 git pull --rebase 2 ...

最新文章

  1. openvidu部署
  2. django Error: [Errno 10013]
  3. Ribbon之ServerList
  4. 《Linux Shell脚本攻略》读书笔记第五章 一网情深
  5. 杨攀:融云专注极致技术 不忘初心打造极简体验
  6. 第11课 尼克与强盗 《小学生C++趣味编程》
  7. sql交叉报表实例(转)
  8. easyUI的combobox的实现
  9. mysql empty table_【MySQL】 empty table and delete table.
  10. 面试从开始到结束, 必备的一些小技巧
  11. eclipse出现String错误,问题已解决
  12. 博图导入的程序用step7读出_博图编程与STEP7编程区别
  13. Coverity代码静态检测工具介绍
  14. 华为机试OD真题 javaScript和java 叠积木 堆积木
  15. Android开发之殇
  16. qlikview从mysql中抽取数据的过程,mysql数据同步到sqlserver的过程
  17. 密码套件cipher suite
  18. python pop() ,如何在Python的列表或数组中移除元素
  19. 快乐编程大本营【java语言训练班】第5课: java的数组编程
  20. Sophie Zelmani 苏菲·珊曼妮

热门文章

  1. Docker学习之day01 Docker的前世今生
  2. Python查询快递订单信息
  3. matlab学霸表白公式,一个理科学霸的表白:数学公式的超酷表
  4. 循序渐进学Java day1
  5. arctanx麦克劳林公式推导过程_诱导公式
  6. winform的RichTextBox设置网格线,类似word的稿纸效果
  7. linux桌面lxde 安装_Ubuntu怎么安装轻量级的LXDE桌面?
  8. No rule to make target /opt/ros/kinetic/lib/liborocos-kdl.so.1.3.2问题解决
  9. AppLocker 简要实验笔记
  10. 杂牌平板mt6797_联发科MT6797炸现跑分库 强得令人毛骨悚然