git rebase 理解

merge and rebase git merge and git branch 阅读详情
原文:
一、基本
git rebase用于把一个分支的修改合并到当前分支。
假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。
$ git checkout -b mywork origin
假设 远程分支"origin"已经有了2个提交,如图

 
现在我们在这个分支做一些修改,然后生成两个提交(commit).
$ vi file.txt
$ git commit
$ vi otherfile.txt
$ git commit
...
但是与此同时,有些人也在"origin"分支上做了一些修改并且做了提交了. 这就意味着"origin"和"mywork"这两个分支各自"前进"了,它们之间"分叉"了。

 

在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"(merge commit):

 
但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:
$ git checkout mywork
$ git rebase origin
这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。

 
当'mywork'分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。 如果运行垃圾收集命令(pruning garbage collection), 这些被丢弃的提交就会删除. (请查看 git gc)

 
二、解决冲突
在 rebase 的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用" git-add "命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:
$  git rebase   --continue
这样git会继续应用(apply)余下的补丁。
在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。
$  git rebase   --abort
三、git rebase和git merge的区别
现在我们可以看一下用合并( merge )和用 rebase 所产生的历史的区别:

当我们使用Git log来参看commit时,其commit的顺序也有所不同。
假设C3提交于9:00AM,C5提交于10:00AM,C4提交于11:00AM,C6提交于12:00AM,
对于使用 git merge 来合并所看到的commit的顺序(从新到旧)是: C7 , C6 , C4, C5 , C3 ,C2,C1
对于使用 git rebase 来合并所看到的commit的顺序(从新到旧)是: C7 , C6‘,C5' ,C4,C3, C2,C1
 因为C6'提交只是C6提交的克隆,C5'提交只是C5提交的克隆,
从用户的角度看使用 git rebase 来合并后所看到的commit的顺序(从新到旧)是: C7 , C6,C5 , C4,C3 ,C2,C1
  另外,我们在使用git pull命令的时候,可以使用--rebase参数,即git pull --rebase,这里 表示 把你的本地当前分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把 本地当前 分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到 本地当前 分支上。 关于 git pull的更多内容请参考《 git pull简介 》
对git的rebase(变基)的理解 其实git的官网对变基的解析挺详细的了:地址 从原理上也能理解【变基】和【合并】有啥区别。 我的理解是,【变基】和【合并】都能解决一个问题,那就是合并代码。但是他们的区别是:在master的记录上会有所不同。如下图:(我是用sourceTree做的合并与变基的) 【合并】 【变基】 从上面那两个图可以看到,如果是【合并】的话,C4这一个记录其实还是在experiment分支上的,也就是说mas... 阅读详情

相关推荐

ARM学习 | 紧耦合存储器 (TCM)

TCM 是一种专用的片上存储器,直接与处理器核心耦合。确定性访问:由于不涉及缓存替换或一致性管理,访问延迟固定。高带宽:TCM 通常通过专用总线连接处理器核心,可以提供更高的数据吞吐率。用户管理:TCM 的分配和管理完全由开发者控制,不依赖硬件缓存策略。ARM 处理器中的 TCM 通常分为ITCM(指令紧耦合存储器)和DTCM(数据紧耦合存储器),分别用于存储指令和数据。TCM 是 ARM 处理器中不可忽视的重要特性,在实时系统和高性能嵌入式应用中具有重要地位。

qq_43167806的博客 3329

Git命令操作之rebase

rebase 假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。 $ git checkout -b mywork origin 现在我们在这个分支做一些修改,然后生成两个提交(commit). $ vi file.txt $ git commit $ vi otherfile.txt $ git commit ... 但是与此同时,有些人也在"origin"分支上做了一些修改并且做了提交了. 这就意味着"origin"和"mywork"这两个分支各自"

gg1229505432的博客 2180

海康视觉平台VisionMaster使用学习笔记(1)

双击图像源设置图像源的属性,像素格式分为Mono8和RDB24分别对应导入的图像是彩色还是黑白。打开相机驱动软件MVS,对连接的相机进行属性上的配置,先对相机的IP进行对应的设置。将自动触发的使能打开,保存配置好的相机属性,默认保存到用户集1中。点击MVS软件中的触发按钮,查看相机是否进行正常的触发拍照。打开VM软件添加一个图像源,选择图像源选项拖出图像源。回到VM软件中将选择相机选项选择到配置好参数的相机。取图方式也可以调整为相机取图,将图像源改为相机。双击相机进行连接后对相机的属性进行配置。

A567852的博客 1万+

git merge与git rebase详解

git merge与git rebase详解

✍Snoring cat 6113

基于ProXmoX VE的虚拟化家庭服务器(篇一)—ProXmoX VE 安装及基础配置

ProxmoxVE是一款套开源的虚拟化管理软件,用户可通过网页的方式来管理服务器上使用kvm以及lxc技术运行的虚拟机。同时提供了一些先进功能的支持,如集群、HA等。PVE虽然是开源,却是由一个商业公司在运营、更新以及维护。...

隔壁老瓦的专栏 6321

从零搭建芯片设计环境:在Cadence虚拟机中集成QRC进行寄生参数提取

本文详细介绍了在Cadence虚拟机中集成QRC工具进行芯片设计中的寄生参数提取的全流程。从环境准备、QRC安装配置到实际提取操作,提供了完整的步骤指南和常见问题解决方案,帮助工程师高效搭建芯片设计环境并优化提取性能。

weixin_30379531的博客 618

git merge 和 git rebase 小结

git merge是用来合并两个分支的。 git merge b # 将b分支合并到当前分支 同样 git rebase b,也是把 b分支合并到当前分支 ----------------------------------- 他们的 原理 如下: 假设你现在基于远程分支"...

2万+

从零到一:Ollama工具在RK3588上的深度优化实践

本文详细介绍了如何在RK3588开发板上深度优化Ollama工具,以高效运行DeepSeek模型。通过CPU与NPU负载平衡、模型量化、温度控制等策略,显著提升性能并降低功耗,适用于边缘计算场景。文章提供了具体的配置命令和优化方案,帮助开发者充分发挥RK3588的硬件潜力。

rgv23456789的博客 311

git 的origin的含义、rebase-变基

“origin” 并无特殊含义 远程仓库名字 “origin” 与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样。 同时 “master” 是当你运行git init时默认的起始分支名字,原因仅仅是它的广泛使用,“origin” 是当你运行git clone时默认的远程仓库名字。 如果你运行git clone -o booyah,那么你默认的远程分支名字将会是booyah/master。 rebase-变基 你可以提取在C4中引入的补丁和修改,然...

awodwde的博客 901

从零搭建 C# + YOLO 工业视觉系统:从模型训练到上位机部署(工业级落地)

做工业质检、自动化生产线的同学都懂:一套能用的工业视觉系统,既要“检测准”,又要“界面易操作”,还要“部署稳”。之前帮某电子厂做PCB缺陷检测,一开始用Python+YOLO做检测核心,QT做上位机,结果踩了无数坑:Python推理速度波动大,QT和Python跨语言集成繁琐,数据传递容易卡顿;后来换成C# + YOLO的组合,直接打通了“模型训练-上位机开发-工业部署”全流程——C#的WinForms/WPF开发上位机高效,工业相机SDK支持完善;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 737

第四章:无感FOC的平滑启动艺术:告别“咔哒”声与抖动

无感FOC启动技术面临"先有位置还是先有旋转"的核心矛盾,导致常见故障包括位置失准、负载突变等。基础方案采用开环I/F控制,但存在重载启动困难等局限性。进阶方案结合IPD位置检测技术,通过脉冲电压注入法精准定位转子初始位置。关键技术在于开环到闭环的平滑切换,采用混合观测器设计和相位对齐技术。量产优化包括自适应参数整定和故障恢复机制,确保启动可靠性和一致性。该系统工程方案可有效解决启动抖动、异响等问题,提升用户体验。

汽车软件开发 739

rebase 之前的代码_从零开始写git:理解rebase与merge

前文提要:国际劳动节,一起写一个linux初版的git吧下文由 PioneerIncubator组织的yyellowsun与ZYZ合作而成。rebase(变基)git-rebase - Reapply commits on top of another base tip——git官方文档什么是rebasegit的初学者可能对rebase了解不深,它的使用频率没有pull、add、comm...

weixin_42493118的博客 811

机器翻译的评价标准:BLEU、ROUGE等指标说明及代码实现

机器翻译领域常用的自动评价指标主要包括BLEU、ROUGE、METEOR和COMET四大类。BLEU基于n-gram精确率和短句惩罚,ROUGE关注召回率,METEOR结合精确率和召回率并考虑同义词,COMET则利用预训练模型计算语义相似度。这些指标各有特点:BLEU适用于机器翻译,ROUGE对长句友好,METEOR更接近人工评分,COMET无需参考译文。代码实现上,sacrebleu、rouge-score等库提供了便捷的计算方式。新兴趋势包括基于BERT等模型的语义评估和大语言模型评估器,但传统指标仍占

数据知道的博客 9419

深入理解 Git Rebase

本文是一篇关于Git变基操作(rebase)的详细指南。文章首先介绍了Git允许修改历史记录的核心价值,然后通过一系列实操示例逐步讲解了10种常见变基场景:从简单的修改最近提交(--amend),到修复较早提交(interactive rebase)、合并多个提交(squash)、拆分提交(edit)、调整提交顺序,再到分支变基和解决冲突等高级用法。指南特别强调,虽然变基功能强大,但应避免修改已公开或共享分支的历史记录,并提供了搭建测试环境的建议。文章最后还介绍了git reflog这一"后悔药&

dengfuma的专栏 1653

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深入理解Git:rebase与merge

它会取出一个公共的祖先节点,然后尝试将两个分支从该节点开始发生的所有变化都合并到一起,最终生成一个新的节点(合并提交)。这个新节点会包含两个分支的所有修改。它会先将当前分支上的所有提交临时保存,然后将当前分支更新到目标分支的最新状态,接着将之前保存的提交逐个应用到目标分支的最新状态上,形成一个新的线性提交历史。在实际开发中,我们应该根据项目的需求、团队的规模和成员的Git使用经验来选择合适的操作。然而,很多开发者在使用时容易混淆,今天我们就来详细解析一下两者的区别、优缺点,并通过实战代码来演示它们的用法。

wujiayu31415的博客 823

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

谈谈对git rebase的理解

gIt rebase 的三种作用1.拉代码rebase2.合并分支rebase3.处理commit提交记录1.拉取代码rebase正常我们在拉取远程代码时使用 git pullgit pull === git fetch + giet merge 是使用fast-forwad模式,如果出现冲突后,解决冲突且重新提交记录,则会出现分支错乱的问题,输入命令查看log记录 git log --graph --pretty=oneline --abbrev-commit强迫症的同学一定会受不了,因此出现git p

larance的挨踢生活 1452

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【知识】可视化理解git中的cherry-pick、merge、rebase

确实非常像,初学者不好理解

xfxuezhang.cn 5212

git rebase的理解

然后有一些情况比如你们改了同一个文件,然后你的还在你的feature1上,你的feature1功能没开发,并没有合并,你现在需要拉取主分枝上最新的代码,然后同步到你的feature1上,在进行修改和开发。我们以master为主分枝,然后各自通过柱分枝建立了自己的分支,feature1 ,feature2, feature1的任务完成之后 提交到了feature1 ,然后另外一个同学在feature2上开发了自己的任务测试之后没问题,并且合并到master分枝上了。通过Shift + I 编辑(Mac)

qq_24418107的博客 591

面试官:说说你对git rebase 和 git merge的理解?区别?

一、是什么在使用 git 进行版本管理的项目中,当完成一个特性的开发并将其合并到 master 分支时,会有两种方式:git mergegit rebasegit rebase 与 git...

weixin_44475093的博客 588

对git rebase 和git merge的理解

合并bugfix分支到master分支时,如果master分支的状态没有被更改过,即 bugfix分支的历史记录包含master分支所有的历史记录。git rebase 与 git merge都有相同的作用,都是将一个分支的提交合并到另一分支上,但是在原理上却不相同。主要的好处是历史记录更加清晰,是在原有提交的基础上将差异内容反映进去,消除了 git merge所需的不必要的合并提交。从上面可以看到,会把两个分支的最新快照以及二者最近的共同祖先进行三方合并,合并的结果是生成一个新的快照。

zz130428的博客 748

git pull --rebase的理解

在使用git的过程中经常需要使用到git pull命令,在更新远端代码的同时如果与本地代码产生冲突了, 那么冲突的文件中就出现了需要手动合并的部分,而git pull --rebase不同的地方则是当有这些冲突存在时, git帮我们自动创建了一个新的分支,并且git告诉你接下来你要在这个新的分支上处理这个冲突, 此时执行git status命令后可以看到首要的提示是这样的: re...

3777

Git 里的 branch、merge、rebase 到底怎么理解

它们看起来都和“合代码”有关,但又不像一回事。其实这 3 个概念并没有那么神秘。branchmergerebase这篇文章就专门把这 3 件事拆清楚。

m0_74944090的博客 208

再次理解 git rebase

为什么说“再次”呢,因为之前有发过一篇 git rebase 的文章,如今刚好又要用到,发现不会使用了,而且当时的也理解不太对~ git rebase 是基准基变的意思,在原来的提交记录上可以变成任何你想要的的模样!(确实很强大) 我的使用场景 是将多个提交记录合并成一个提交记录 首先 理解几个git rebase时会用到的关于提交记录将变成怎样的参数 pick:按原样应用所选的提交。 edit:选择在应用此提交之前编辑受此提交影响的文件。 drop:忽略所选的commit,因此不会应用这些更改 squ

Java陈小白 457

git merge与rebase理解

git merge与rebase理解 git merge 具体来讲, merge 做的事是: 从目标 commit 和 当前 commit 分叉的位置起,把 目标 commit 的 路径上的所有 commit 的内容一并应用到当前 commit ,然后自动生成一个新的 commit 。 例如下面这个图中: 上面这个图是准确的么?这里要说明一下操作顺序,在节点2的位置创建了一个branch1分...

宅神的博客 1217

如何理解git rebase?

在merge PR的过程中,rebase and merge会产生冲突,因此需要补充一下Git rebase的知识点。 Understanding Rebase (And Merge) in Git Merging vs. Rebasing webstorm 的 Rebase Current onto selected什么操作? re...

weixin_34006965的博客 695
上一篇: iterm2 高亮配色 设置
下一篇: iOS 构建一个容器控制器
Erice_e
博客等级 码龄12年 31粉丝 128原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值