1.变基的基本操作

  在Git中整合来自不同分支的修改主要有两种方法:merge和rebase。

看下面的例子: 开发任务分叉到了两个不同的分支,并且都有了新的提交。

这时候我们可以使用 git merge 命令将experiment分支合并进入master分支,Git会将C3、C4以及两者最近的共同祖先做一个三方合并,并且生成一个新的提交。如下图所示:

  其实我们还可以使用rebase命令:rebase命令将提交到某一分支上的提交都移至另一个分支上

$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command

  如下图所示:  使用rebase之后,将experiment分支上的提交移动到了master分支的后面。

  原理:首先找到两个分支(当前所在分支experiment和目标基底分支master)的最近共同祖先(即C2),然后对比当期分支相对于最近共同祖先的所有提交,提取相应的修改存为临时文件,然后将当前分支指向目标基底(即C3),最后将此前存好的临时文件依次应用(理解为将从当前分支上,从最近共同祖先开始的后一个提交节点,开始复制,放到目标基底后)。

  完成rebase操作之后,可以运行以下命令,进行一次快速移动。

$ git checkout master
$ git merge experiment

  操作完成之后,提交历史如下图所示。

  与直接使用merge命令相比,rebase命令可以使提交历史更加的整洁,看上去就像是一条直线。使用rebase的目的是是提交历史看起来更加的整洁,其实,无论是通过merge还是rebase,整合的最终结果都是一样的,只不过rebase的提交历史看起来更加的整洁。rebase是将一系列提交按照原有次序依次应用到另一分支上,而merge是将最终结果merge在一起。

2.rebase VS merge

  对于rebase和merge哪种好,有两种观点:

  1.有一种观点认为,仓库的提交历史即是记录着实际上发生过什么,它是一种历史文档,本身具有价值,不能随意修改,这些历史应该被保留下来,供后人进行查阅。这种观点支持使用merge而不是rebase。

  2.另一种观点正好相反,他们认为提交历史是项目开发过程中发生的事情,没有人会出版一本书的第一版草稿,都是需要进行多次修订之后才能进行出版的,修订之前的这些历史不应该被读者看到。这种观点鼓励使用rebase。

  总的原则:只对尚未推送或分享给他人的本地修改执行rebase操作清理历史,从不对已经提交到别处的提交进行rebase操作。

转载于:https://www.cnblogs.com/wangwenhui/p/10673294.html

13.Git分支-变基(rebase)、rebase VS merge相关推荐

  1. Git之变基方式Rebase的使用

    一.Rebase 产生意义 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase.对应 merge 操作来说,想必我们都已经使用过很多次了,而 rebase 又是用在哪里 ...

  2. 3.6 Git 分支 - 变基

    变基 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase. 在本节中我们将学习什么是"变基",怎样使用"变基",并将展示该操作的 ...

  3. Git 分支 - 变基

    2019独角兽企业重金招聘Python工程师标准>>> 变基 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase. 在本节中我们将学习什么是" ...

  4. 6 Git 分支 - 变基

    变基 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase.在本节中我们将学习什么是"变基",怎样使用"变基",并将展示该操作的惊 ...

  5. Git 分支 - 变基示例操作

    目录 变基 变基的基本操作 更有趣的变基例子 变基的风险 用变基解决变基 变基 vs. 合并 变基 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase. 在本节中我们将 ...

  6. Git之深入解析Git的杀手级特性·分支管理与分支变基的开发工作流以及远程分支的跟踪

    一.Git 分支简介 几乎所有的版本控制系统都以某种形式支持分支,使用分支意味着可以把工作从开发主线上分离开来,以免影响开发主线.在很多版本控制系统中,这是一个略微低效的过程,常常需要完全创建一个源代 ...

  7. SourceTree的简单使用 - 变基(rebase)

    SourceTree的简单使用 - 变基(rebase) 一.变基与合并 二."变基"操作在SourceTree上的使用 假设"变基"的使用场景 "变 ...

  8. git使用变基方式同步远程和本地副本的代码同步方式

    一.确保你父分支的本地副本与项目主仓库中最新的提交同步 git pull --rebase 若有必要, 请显式指定参数.在使用 pull 命令更新一个分支的本地副本时,参数中远程连接和远程分支的名称通 ...

  9. Git (13) -- Git 分支 -- 分支的新建与合并

    文章目录 0.准备工作 1.新建分支 一个简单提交历史: 创建一个新分支指针: `iss53` 分支随着工作的进展向前推进: 基于 `main` 分支的紧急问题分支 `hotfix branch`: ...

最新文章

  1. mysql的表最多可设置多少字段?
  2. javascript中使用重载
  3. next_permutation(start,end)
  4. 老子今天不加班,程序员也需要自由
  5. 计算机网络:九大命令!解决网络故障新思路
  6. Android布局属性详解之RelativeLayout
  7. WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
  8. 【Keil5】关于keli5使用ST-link下载的配置方法
  9. Robocup 2D仿真足球机器人环境搭建(Ubuntu 16.04)
  10. Overture2020免费下载直装版专业钢琴打谱软件(附序列号码)
  11. LabWindows 读写 Excel
  12. excel换行快捷键_超实用的16个Excel快捷键,一定要收藏!
  13. python求和函数详解_python求和函数sum()详解
  14. 三段位移求加速度_求:速度与位移的公式推导
  15. 关于ADL的查找顺序
  16. DBA职业规划技术成长路线
  17. 一文读懂通信玩家半年财报,有人欢喜有人愁!
  18. POSIX正则表达式
  19. Lua不同类型变量做比较时的问题
  20. 使用高防CDN有什么用处?

热门文章

  1. android java json与实体互相转换工具
  2. python 列表创建
  3. 【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则
  4. C++ smart pointer
  5. Linux关机命令和重启命令
  6. 【转】批量删除redis中的key
  7. 【Centos】修改系统字符集
  8. js 中导出excel 较长数字串会变成科学计数法
  9. imx6 android SD卡启动
  10. NSDictionary 、 NSMutableDictionary