(1)git rebase 让你的提交记录更加清晰可读

git rebase 的使用

rebase 翻译为变基,他的作用和 merge 很相似,用于把一个分支的修改合并到当前分支上。

如下图所示,下图介绍了经过 rebase 前后提交历史的变化情况。

现在我们来用一个例子来解释一下上面的过程。

假设我们现在有2条分支,一个为 master ,一个为 feature/1,他们都基于初始的一个提交add readme进行检出分支,之后,master分支增加了3.js,和4.js的文件,分别进行了2次提交,feature/1也增加了1.js2.js的文件,分别对应以下2条提交记录。

master 分支如下图:

feature/1分支如下图

结合起来看是这样的

此时,切换到 feature/1 分支下,执行 git rebase master ,成功之后,通过 log 查看记录。

如下图所示:可以看到先是逐个应用了 mater 分支的更改,然后以 master 分支最后的提交作为基点,再逐个应用 feature/1的每个更改。

所以,我们的提交记录就会非常清晰,没有分叉,上面演示的是比较顺利的情况,但是大部分情况下,rebase 的过程中会产生冲突的,此时,就需要手动解决冲突,然后使用git addgit rebase --continue的方式来处理冲突,完成 rebase,如果不想要某次 rebase 的结果,那么需要使用 git rebase --skip来跳过这次 rebase。

(2)git merge 和 git rebase 的区别

不同于 git rebase的是,git merge 在不是 fast-forward(快速合并)的情况下,会产生一条额外的合并记录,类似Merge branch 'xxx' into 'xxx'的一条提交信息。

另外,在解决冲突的时候,用 merge 只需要解决一次冲突即可,简单粗暴,而用 rebase 的时候 ,需要一次又一次的解决冲突。

(3)git rebase 交互模式

在开发中,常会遇到在一个分支上产生了很多的无效的提交,这种情况下使用 rebase 的交互式模式可以把已经发生的多次提交压缩成一次提交,得到了一个干净的提交历史,例如某个分支的提交历史情况如下:

进入交互式模式的方式是执行:

git rebase -i <base-commit>

参数base-commit就是指明操作的基点提交对象,基于这个基点进行 rebase 的操作,对于上述提交历史的例子,我们要把最后的一个提交对象(ac18084)之前的提交压缩成一次提交,我们需要执行的命令格式是:

git rebase -i ac18084

此时会进入一个 vim 的交互式页面,编辑器列出的信息像下列这样。

想要合并这一堆更改,我们要使用 squash 策略进行合并,即把当前的 commit 和它的上一个 commit 内容进行合并, 大概可以表示为下面这样。

pick  ... ...
s     ... ...
s     ... ...
s     ... ...

修改文件后 按下:然后wq保存退出,此时又会弹出一个编辑页面,这个页面是用来编辑提交的信息,修改为feat: 更正,最后保存一下,接着使用git branch查看提交的 commit 信息,rebase 后的提交记录如下图所示,是不是清爽了很多?rebase 操作可以让我们的提交历史变得更加清晰。

特别注意,只能在自己使用的 feature 分支上进行 rebase 操作,不允许在集成分支上进行 rebase,因为这种操作会修改集成分支的历史记录。

git merge 和 git rebase的区别相关推荐

  1. git merge 和 git rebase详解

    git merge 和 git rebase 都是用来合并两个分支的. git merge b   #把b分支合并到当前分支 git rebase b   #把b分支合并到当前分支 --------- ...

  2. git(8)---git merge 和 git rebase 小结

    git merge 和 git rebase 小结 git merge是用来合并两个分支的. git merge b # 将b分支合并到当前分支 同样 git rebase b,也是把 b分支合并到当 ...

  3. git merge和git merge --no-ff有什么区别?

    本文翻译自:What is the difference between `git merge` and `git merge --no-ff`? Using gitk log , I could n ...

  4. git merge\git merge --no-commit\git merge --squash区别

    假设现有分支develop.test.需要将test合并到develop分支. 首先git checkout develop. git merge test test分支会合并到develop,会有t ...

  5. git merge 与 git rebase的区别

    转自:https://blog.csdn.net/liuxiaoheng1992/article/details/79108233 其实这个问题困扰我有一段时间,相信也有人和我一样有这个困扰,网上已有 ...

  6. git merge squash 和 rebase 区别

    在合并分支的时候,默认是有三种选项的,分别是 普通的 merge squash merge rebase merge 普通 Merge 说到合并分支,可能我们最熟悉的操作是这样的: 先切换到目标分支: ...

  7. [转]git merge 与 git rebase的区别

    git log --graph可以查看分支合并图 1>他们都是用于从一个分支获取并且合并到当前分支 2>一个场景:在feature分支进行新特性的开发,与此同时,master分支也有新的提 ...

  8. 自动化部署之git merge和git rebase的区别

    命令行测试 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3 ...

  9. git merge 和 git rebase 小结

    Git merge是用来合并两个分支的. git merge b # 将b分支合并到当前分支 同样 git rebase b,也是把 b分支合并到当前分支 ---------------------- ...

最新文章

  1. ARM CPU分析(一) 指令集
  2. 不使用临时表,仅使用select实现查询出多行常数
  3. python scrapy request_Scrapy中的Request和日志分析|python基础教程|python入门|python教程...
  4. 计算机为什么检测不到u盘启动项,BIOS设置U盘为第一启动项后检测不到如何解决?...
  5. 查看oracle大页,在Oracle11.2.0.3.0上开启大页(hugepages)的详细解析
  6. Vue.js学习总结(2)——Vue.js2.X + ElementUI开发环境搭建
  7. 随想录(c编译器的实现)
  8. I9 9900K线程_收藏党抓紧了!英特尔停产i9-9900K特色包装,只因运输太浪费
  9. 你敢信?FBI 的190万条恐怖分子监控名单竟无密码保护且不慎遭暴露
  10. Spark之functions
  11. 学习RedHat7第一课
  12. 34款管理系统、ERP、CRM、OA等(冠唐\金蝶等)
  13. python中remove函数是什么意思_python中remove函数的用法是什么?
  14. 2022-08-01 网工进阶(二十四) STP进阶知识
  15. 【毕业设计】指纹识别系统设计与实现 - 单片机 嵌入式 物联网
  16. 【密码科普】第7期 - 凯撒密码与密码机
  17. K8S教程(7)使用探针对容器进行健康检查
  18. 关于C语言的图像光标处理
  19. 我也是从寒门走出来的,程序员这个职业是我最好的选择!
  20. 用Imagex.exe 捕获Client机台映像并网络还原 网络还原篇

热门文章

  1. 音视频学习之rtsp推拉流学习2(流媒体服务器ZLMediaKit)
  2. halcon在image上写文字
  3. python两个不同变量相加_Python之旅2-----变量、运算与编码
  4. Burp suite常用操作(Target、Option)
  5. App开发 免费和付费的博弈
  6. C#中的类型转换问题?
  7. 计算机系统要解决的问题输入,电脑切换不出来输入法,详细教您解决切换输入法的问题...
  8. PMP 证书含金量很低?我说职场悄悄逆袭都靠它
  9. 【BZOJ-2503】相框 并查集 + 分类讨论
  10. 【2611. 老鼠和奶酪】