git rebase
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相关推荐
- git rebase 和 git merger
& git merge 在上图中,每一个绿框均代表一个commit.除了c1,每一个commit都有一条有向边指向它在当前branch当中的上一个commit. 图中的项目,在c2之后就开了另 ...
- 合并代码还在用git merge吗?我们都用git rebase!
欢迎关注方志朋的博客,回复"666"获面试宝典 git merge 和 git rebase的区别 目的都是将一个分支的 commit 合并到到另外一个分支中去. git merg ...
- git merge 和 git rebase详解
git merge 和 git rebase 都是用来合并两个分支的. git merge b #把b分支合并到当前分支 git rebase b #把b分支合并到当前分支 --------- ...
- 你什么时候使用git rebase而不是git merge?
什么时候建议使用git rebase与git merge ? 成功改造后我还需要合并吗? #1楼 在合并/ rebase之前: A <- B <- C [master] ^\D <- ...
- git rebase用法
开发任务分叉到两个不同分支,又各自提交了更新 整合分支最容易的方法是 merge 命令. 它会把两个分支的最新快照(C3 和 C4)以及二者最近的共同祖先(C2)进行三方合并,合并的结果是生成一个新的 ...
- 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% ...
- git Rebase 代替合并
虽然合并(merge)操作可以用来简单和方便地整合改动,但是它却不是唯一的方法."Rebase" 就是另一种替代手段. 注释 虽然 rebase 相对于我们已知的整合操作来说有着比 ...
- git Rebase 变基 教程
在上一节我们看到了,多人在同一个分支上协作时,很容易出现冲突.即使没有冲突,后push的童鞋不得不先pull,在本地合并,然后才能push成功. 每次合并再push后,分支变成了这样: $ git l ...
- 用git rebase合并
合并issue3分支的时候,使用rebase可以使提交的历史记录显得更简洁. 现在暂时取消刚才的合并. $ git reset --hard HEAD~ 切换到issue3分支后,对master执行r ...
- git rebase -i 修改提交
教程3 改写提交! 6. 用rebase -i 修改提交 为了节省时间,这个教程使用现有的历史记录作为本地数据库. 从这里下载 我们进入stepup-tutorial/tutorial6目录.本地端的 ...
最新文章
- python知乎-知乎大佬李启方道出肺腑之言:为什么我不建议你学Python?
- mysql的索引本质是一颗_一文揭开Mysql索引本质
- Vue.js 过滤器
- 【linux】Grok Debugger本地安装过程
- 高抗干扰低功耗LCD驱动芯片-VK2C21A/B/C/D,常用在电气类、工控类低功耗驱动上
- Firefox中强制复制粘贴的插件
- 常见的Ajax写法汇总
- WinSCP显示隐藏文件
- uniapp银行卡卡片
- 2021西湖论剑web部分wp
- 真空扫街机行业调研报告 - 市场现状分析与发展前景预测
- AS运行安装失败,真机提示“软件包似乎无效”问题
- 转载:Android (争取做到)最全的底部导航栏实现方法
- java判断日期前后_Java丨时间判断谁前谁后
- unity 震动脚本_Unity - Cinemachine实现相机抖动
- 中国国有企业有哪些 国有企业名录怎么查询
- Linux Socekt 相关操作代码
- JavaEye范凯谈唐骏造假事件
- 学完python再学Java顺利吗,学完python再学Java要多久
- Leetcode(1110)——删点成林
热门文章
- L2+/L3级智能驾驶功能量产,为何说侧向补盲激光雷达是必备传感器?
- 计算机word格式,2017年职称计算机Word教程:Word段落格式
- 在数学的海洋中飘荡(转自Dahua的Blog)
- Mac 连接显示器,外接显示器不出影像
- 循序渐进学Java day1
- 基于TensorFlow Encrypted (TFE)的隐私计算benchmark
- 过年了,想窝在家里把这些黑客电影都看完(附剧情简介和评分)
- 83岁清华奶奶,62岁 IT 大爷被阿里40万年薪争抢,你大妈始终是你大妈,你大爷永远是你大爷!...
- 三菱Q系列PLC项目资料 本系统采用三菱Q系列PLC,本系统中用到16个伺服电机
- 大学计算机专业那些课 --左飞