rebase

Git提供了一种称为rebasing的独特功能,作为 merge 的替代方案。它的语法是:

git rebase [new-commit]

运行时,Git执行以下步骤:

  • 假设你所在的分支为 new-branch, 你要rebase 的分支是 master。 找到 master 和 new-branch 的共同祖先部分,从这个commit开始到new-branch HEAD 之间的所有commit。都要找出来。 这可以被认为是一个两步过程:首先,找到[new-commit] 和 master 的共同祖先; 称之为 祖先提交。其次,收集祖先提交和当前提交之间的所有 提交。
  • 确定每个提交的更改内容,并将这些更改放在一边。
  • 将 current head 设置为[new-commit]。
  • 找到第二步中的每一个更改,重播更改到当前 HEAD 并创建新提交。

结果是当前提交的HEAD是[new-commit]的后代,但它包含所有更改,就像它已与[new-commit]合并一样。

例如,假设存储库看起来像:

         +-------------- (D)/                 |
(A) -- (B) -- (C)         ||          |master  new-branch|HEAD

执行 git rebase master 将会产生下面的结果:

                 +------ (E)/         |
(A) -- (B) -- (C)         ||          |master  new-branch|HEAD

这里 (E) 是一个新的 commit, 他将包含之前 (B)和 (D)之间的变更。但会把这些变更重新组织,放在基于(C)之上。
Rebase 的优势在于这里没有创建 merge commit. 但是,因为HEAD不是pre-rebase HEAD提交的后代,所以rebase可能会有问题。首先,这意味着无法将重新定位的头部推送到远程服务器,因为它不会导致快速合并。而且,它会导致信息丢失。不再知道(D)曾经在 新的分支头上。这导致“历史的变化”,这可能使已经知道提交(D)的人感到困惑。

Common Rebasing Use Practices

首先,如果您自己开发分支而不与任何人共享分支,您可以对其进行重新设置以使分支与主分支保持同步。然后,当您最终将已开发的分支合并到主分支时,它将没有合并提交,因为看起来您的开发分支是主头的后代。此外,主分支可以通过快进合并而不是常规合并提交继续前进。

其次,如果您提交分支但该分支在远程计算机上同时更改,则可以使用rebase来转移您自己的提交,从而允许您将提交推送到远程存储库。从上面的例子:

                                     +-- (D)/     |
(A) -- (B) -- (C)           (A) -- (B)    ||                          |master                     masterYour repository             Remote repository

如果执行 fetch,您的存储库将如下所示:

         +-------------- (D)/                 |
(A) -- (B) -- (C)         ||          |master origin/master

现在,假设master是你当前的头,你运行:

git rebase origin / master

您的存储库将如下所示:

          +------ (D) ------+/         |         \
(A) -- (B)         |         (E)|          |origin/master  master

Commit(E)包含你在提交(B)和(C)之间所做的更改,但现在commit(E)是(D)的后代。这允许您作为快进合并推动您的主头 ,以更新origin / master。

git rebase相关推荐

  1. git rebase 和 git merger

    & git merge 在上图中,每一个绿框均代表一个commit.除了c1,每一个commit都有一条有向边指向它在当前branch当中的上一个commit. 图中的项目,在c2之后就开了另 ...

  2. 合并代码还在用git merge吗?我们都用git rebase!

    欢迎关注方志朋的博客,回复"666"获面试宝典 git merge 和 git rebase的区别 目的都是将一个分支的 commit 合并到到另外一个分支中去. git merg ...

  3. git merge 和 git rebase详解

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

  4. 你什么时候使用git rebase而不是git merge?

    什么时候建议使用git rebase与git merge ? 成功改造后我还需要合并吗? #1楼 在合并/ rebase之前: A <- B <- C [master] ^\D <- ...

  5. git rebase用法

    开发任务分叉到两个不同分支,又各自提交了更新 整合分支最容易的方法是 merge 命令. 它会把两个分支的最新快照(C3 和 C4)以及二者最近的共同祖先(C2)进行三方合并,合并的结果是生成一个新的 ...

  6. 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% ...

  7. git Rebase 代替合并

    虽然合并(merge)操作可以用来简单和方便地整合改动,但是它却不是唯一的方法."Rebase" 就是另一种替代手段. 注释 虽然 rebase 相对于我们已知的整合操作来说有着比 ...

  8. git Rebase 变基 教程

    在上一节我们看到了,多人在同一个分支上协作时,很容易出现冲突.即使没有冲突,后push的童鞋不得不先pull,在本地合并,然后才能push成功. 每次合并再push后,分支变成了这样: $ git l ...

  9. 用git rebase合并

    合并issue3分支的时候,使用rebase可以使提交的历史记录显得更简洁. 现在暂时取消刚才的合并. $ git reset --hard HEAD~ 切换到issue3分支后,对master执行r ...

  10. git rebase -i 修改提交

    教程3 改写提交! 6. 用rebase -i 修改提交 为了节省时间,这个教程使用现有的历史记录作为本地数据库. 从这里下载 我们进入stepup-tutorial/tutorial6目录.本地端的 ...

最新文章

  1. python知乎-知乎大佬李启方道出肺腑之言:为什么我不建议你学Python?
  2. mysql的索引本质是一颗_一文揭开Mysql索引本质
  3. Vue.js 过滤器
  4. 【linux】Grok Debugger本地安装过程
  5. 高抗干扰低功耗LCD驱动芯片-VK2C21A/B/C/D,常用在电气类、工控类低功耗驱动上
  6. Firefox中强制复制粘贴的插件
  7. 常见的Ajax写法汇总
  8. WinSCP显示隐藏文件
  9. uniapp银行卡卡片
  10. 2021西湖论剑web部分wp
  11. 真空扫街机行业调研报告 - 市场现状分析与发展前景预测
  12. AS运行安装失败,真机提示“软件包似乎无效”问题
  13. 转载:Android (争取做到)最全的底部导航栏实现方法
  14. java判断日期前后_Java丨时间判断谁前谁后
  15. unity 震动脚本_Unity - Cinemachine实现相机抖动
  16. 中国国有企业有哪些 国有企业名录怎么查询
  17. Linux Socekt 相关操作代码
  18. JavaEye范凯谈唐骏造假事件
  19. 学完python再学Java顺利吗,学完python再学Java要多久
  20. Leetcode(1110)——删点成林

热门文章

  1. L2+/L3级智能驾驶功能量产,为何说侧向补盲激光雷达是必备传感器?
  2. 计算机word格式,2017年职称计算机Word教程:Word段落格式
  3. 在数学的海洋中飘荡(转自Dahua的Blog)
  4. Mac 连接显示器,外接显示器不出影像
  5. 循序渐进学Java day1
  6. 基于TensorFlow Encrypted (TFE)的隐私计算benchmark
  7. 过年了,想窝在家里把这些黑客电影都看完(附剧情简介和评分)
  8. 83岁清华奶奶,62岁 IT 大爷被阿里40万年薪争抢,你大妈始终是你大妈,你大爷永远是你大爷!...
  9. 三菱Q系列PLC项目资料 本系统采用三菱Q系列PLC,本系统中用到16个伺服电机
  10. 大学计算机专业那些课 --左飞