开发任务分叉到两个不同分支,又各自提交了更新

整合分支最容易的方法是 merge 命令。 它会把两个分支的最新快照(C3 和 C4)以及二者最近的共同祖先(C2)进行三方合并,合并的结果是生成一个新的快照(并提交)。

其实,还有一种方法:你可以提取在 C4 中引入的补丁和修改,然后在 C3 的基础上应用一次。 在 Git 中,这种操作就叫做 变基(rebase)。 你可以使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。

在这个例子中,你可以检出 experiment 分支,然后将它变基到 master 分支

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

它的原理是首先找到这两个分支(即当前分支 experiment、变基操作的目标基底分支 master) 的最近共同祖先 C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件, 然后将当前分支指向目标基底 C3, 最后以此将之前另存为临时文件的修改依序应用。 (译注:写明了 commit id,以便理解,下同)

现在回到 master 分支,进行一次快进合并。

$ git checkout master
$ git merge experiment


此时,C4’ 指向的快照就和 the merge example 中 C5 指向的快照一模一样了。 这两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。 你在查看一个经过变基的分支的历史记录时会发现,尽管实际的开发工作是并行的, 但它们看上去就像是串行的一样,提交历史是一条直线没有分叉。

一般我们这样做的目的是为了确保在向远程分支推送时能保持提交历史的整洁——例如向某个其他人维护的项目贡献代码时。 在这种情况下,你首先在自己的分支里进行开发,当开发完成时你需要先将你的代码变基到 origin/master 上,然后再向主项目提交修改。 这样的话,该项目的维护者就不再需要进行整合工作,只需要快进合并便可。

请注意,无论是通过变基,还是通过三方合并,整合的最终结果所指向的快照始终是一样的,只不过提交历史不同罢了。 变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把最终结果合在一起。

原文链接:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA

git rebase用法相关推荐

  1. git rebase用法_Git:Clone别人的代码之后push到自己码云上失败的解决办法

    最近也是刚开始使用gitee,比较生疏.场景是这样的: clone了朋友的一份代码到自己的本地,然后自己想把它保存到自己的gitee 私有仓库上,就在gitee上面创建了一个私有的仓库,然后多次pus ...

  2. git rebase用法_Git入门实战

    如果给所有软件列出一个排行榜的话,那么Git定会名列前茅.Git对于代码项目的管理是具有划时代意义的,向Linus致敬,不但写出了可以与Windows争锋的Linux系统,还设计实现了如此强大的版本管 ...

  3. git rebase和git merge的用法

    http://softlab.sdut.edu.cn/blog/subaochen/2016/01/git-rebase%E5%92%8Cgit-merge%E7%9A%84%E7%94%A8%E6% ...

  4. git merge用法_Git 基本命令 merge 和 rebase,你真的了解吗?

    前言 Git 中的分支合并是一个常见的使用场景. 仓库的 bugfix 分支修复完 bug 之后,要回合到主干分支,这时候两个分支需要合并: 远端仓库的分支 A 有其他小伙伴合入了代码,这时候,你需要 ...

  5. git rebase的两种用法(最全)

    rebase的两种用法 用法一: 合并当前分支的多个commit记录 1. 找到想要合并的commit, 使用rebase -i 2. 进入Interact交互界面 3.使用s命令 合并到上一个com ...

  6. [转]【Git】rebase 用法小结

    https://www.jianshu.com/p/4a8f4af4e803 本文主要参考 https://git-scm.com/docs/git-rebase rebase在git中是一个非常有魅 ...

  7. git命令之git rebase 的用法

     rebase 假设你现在基于远程分支"origin",创建一个叫"mywork"的分支. $ git checkout -b mywork origin ...

  8. git rebase 的几种用法

    演示过程中,为便于区分修改结果,未使用commit 版本号,建议各位使用尽量以版本号为准 1.修改历史提交信息 例如:将提交历史 修改提交1改为 develop 修改提交1 修改步骤: 查看 git的 ...

  9. 使用Git rebase合并多条提交记录commit。以及使用 git commit amend本地提交直接合并到远程已有commit的用法

    需求场景一 : 对某个小的功能点进行多次反复的修改提交,且已经提交到远程,导致commit记录过多,太过于杂乱无章,想要精简合并一些提交记录. 场景还原: 比如下图4个git commit记录,log ...

最新文章

  1. qt连接mysql提示QMYSQL driver not loaded
  2. 周鸿祎回顾IPO一周年:保持创业心态 看好无线
  3. CS224n-week1-课程导学
  4. ssh远程连接不上服务的处理过程总结
  5. Given a singly linked list where elements are sorted in ascending order, convert it to a height bala
  6. windows 10 80端口占用处理方法_已迁移
  7. QLoo graphql engine 学习二 基本试用(kubernetes)
  8. bzoj3545/bzoj3551 [ONTAK2010]Peaks/Peaks加强版
  9. 使用计算机打印汉子文档,电子科技大学《计算机应用基础(本科)》20春期末考试【标准答案】...
  10. 侠客行,我是谁,谁是我
  11. 怎么使用SSH从服务器下载文件
  12. 南京师范大学地理科学学院 汪永进教授等在Nature杂志上发表论文
  13. 三维电子沙盘数字沙盘M3DGIS无人机倾斜摄影三维建模
  14. 替代CH7511B DP转LVDS屏换接设计|替代CH7511B EDP转LVDS转接板电路|CS5211电路原理图
  15. luci网页shell_修改Luci界面
  16. nmap下载和扫描教程
  17. iPhone删掉的照片能恢复吗?iPhone最近删除的照片怎么恢复?
  18. 2021苹果CMSV10完美对接萝卜影视(原生)蓝色版
  19. envi的三个窗口_ENVI显示窗口遥感影像显示遥感数据应用
  20. P5231 [JSOI2012]玄武密码(SAM 经典运用)

热门文章

  1. python画折线图详解-利用python画出折线图
  2. 学python需要什么基础知识-学习python需要什么基础
  3. python第三方库是什么意思-python标准库和第三方库的区别
  4. 查看python库的版本-python中查看第三方库的版本号
  5. 不懂编程可以自学python吗-给初学python的朋友的一些忠告和建议
  6. python能在工程上干嘛-python能干什么?
  7. python翻译程序-python实现翻译word表格小程序
  8. python常用英语单词-3天教你掌握Python必备常用英语词汇
  9. python简单发音-Python如何实现文本转语音
  10. python的GUI库PyQt5的使用