Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >git 中 merge 和 rebase 小记

git 中 merge 和 rebase 小记

作者头像
磊叔的技术博客
发布于 2025-06-07 09:01:49
发布于 2025-06-07 09:01:49
8700
代码可运行
举报
运行总次数:0
代码可运行

作为一线工程师的你,对于 git一定不会陌生,git 作为一个开源的分布式版本控制系统,有着广泛的用户基础。git 使用有很多可视化的工具,idea 自身也大多都集成了 git 套件,如下:

不过相比于这些可视化工具,我更喜欢使用命令行的方式。

本篇背景也是源于实际工作,一个同学遇到的问题是:他从 master 分支自己拉了一个开发分支,但是由于时间很长,所以在提交之前他执行了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git pull

然后 push ,当提交 mr 时发现,自己的提交里有很多别人的 commit 记录。ok,这里背景交代清楚,我们通过一个实际的 case 来看看。

git pull 发生了什么?

  • 从 master 分支切出一个 dev 分支
  • 切到 master 分支,代码修改,然后提交
  • 切回 dev ,执行 git pull

在执行 git pull 之前,先看下 git log

执行 git pull 之后

所以可以非常明显的看到,git pull 操作中有把 master merge 到当前 dev,实际上 git pull 是下面两个指令的整合:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git pull = git fetch + git merge

那既然是 merge,所以 dev 中后续的提交,都会带上此次 merge 的 commit 记录;

这就是那位同学遇到的问题。如果我们不想让自己的提交中含有其他无关的 commit 怎么办?此时就需要 rebase 出场了。

git rebase

  • 从 master 切 一个 rebase-dev 分支
  • 从 master 切 一个 rebase-dev2 分支
  • 修改 rebase-dev2,然后提交,merge 到 master

两次提交记录;这里基于前面提到的 git pull 行为,如果我们期望 rebase-dev 的提交不包括 rebase-dev2 的提交,但是从 log 看, rebase-dev 已经在最新 commit 后面了

图片
图片

image.png

git rebase 本质上是需要给 rebase-dev 变基,就是将基线拉到最新 commit 之前,在 rebase-dev 分支下,执行 git rebase master,此时再观察下 log

可以看到 rebase-dev 已经跑到上面了,下面在 rebase-dev 做修改提交

可以看下,此时提交就没有 rebase-dev2 的 commit 记录了。

关于 git merge 和 git rebase 的小结

  • git merge:分支代码合并后不会破坏原分支的代码提交记录,但是会产生额外的提交记录并进行两条分支的合并
  • git rebase:不会新增提交记录到目标分支,rebase 后可以将对象分支的提交历史续到目标分支上,形成线性提交历史记录

所以你学废了吗?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磊叔的技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Git rebase 使用场景分析
此时git rebase就派上用场了,git rebase的使用场景之一就是合并多次提交记录。如下图连续修改a.js的内容两次,产生了两个commit记录,此时为了提交历史的简洁性可以考虑将其合并成一次提交。
yaoyao_xhguo
2023/03/10
5000
Git rebase 使用场景分析
git rebase详解(图解+最简单示例,一次就懂)[通俗易懂]
网上有太多讲rebase和merge的文章,但大多都是复制粘贴没有自己的理解,而且很多博客的例子写的过于复杂,让人没兴趣看下去。本文举最简洁的例子,大白话几句就让你快速掌握rebase的核心原理和用法。
全栈程序员站长
2022/09/23
22.2K0
git rebase详解(图解+最简单示例,一次就懂)[通俗易懂]
【Git】 什么!?都快2023年了还搞不清楚 git rebase 与 git merge!?
众所周知,在使用 git 进行项目版本管理中,当完成一个功能点的开发并将其合并到 dev 分支时,一般情况下我们会有两种方式进行合并:git merge 与 git rebase,二者都是将一个分支新的commits,合并到另外一个分支上。但是从原理上,二者却截然不同,今天来聊聊二者的用法、区别以及使用场景。
HoMeTown
2022/10/26
3.1K0
【Git】 什么!?都快2023年了还搞不清楚 git rebase 与 git merge!?
git专题 | 同样是分支合并, git merge和rebase有什么区别
上一篇文章中,讲了在 git merge 的两种模式下分支是如何合并的。而在 git 中,除了 merge 命令,rebase 也是用于分支合并。那么,merge 和 rebase 又有什么不同呢。
叫我阿柒啊
2024/09/12
9860
git专题 | 同样是分支合并, git merge和rebase有什么区别
git rebase 还是 merge的使用场景最通俗的解释
git rebase 你其实可以把它理解成是“重新设置基线”,将你的当前分支重新设置开始点。这个时候才能知道你当前分支于你需要比较的分支之间的差异。 原理很简单:rebase需要基于一个分支来设置你当前的分支的基线,这基线就是当前分支的开始时间轴向后移动到最新的跟踪分支的最后面,这样你的当前分支就是最新的跟踪分支。这里的操作是基于文件事务处理的,所以你不用怕中间失败会影响文件的一致性。在中间的过程中你可以随时取消rebase 事务。
且行且珍惜_iOS
2021/09/07
3.5K0
git merge 和 git rebase
为什么会说这两个呢,是因为我觉得这两个命令有一些共同点,而且git merge 常用,git rebase 不常用,放在一起说的时候,可以更方便了解记忆git rebase。
艳龙
2021/12/16
5550
git merge 和 git rebase
【Git学习笔记】逃不掉的merge和rebase
在前面的知识点中我们已经介绍过merge了,实际上遇到过合并,今天以实际中经常遇到的情况作为例子进行实操。
用户6543014
2019/11/23
9.7K0
Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase
上篇博客聊了《git分支管理之rebase 以及 cherry-pick相关操作》本篇博客我们就以Learning Git中的关卡进行展开。下方列举了LearningGit中的 merge、rebase、reset、revert、cherry-pick 以及交互式rebase相关关卡的操作以及对应的解析。后边在聊交互式rebase操作是,不单单给出了LearningGit中的内容,而且给出了真正的Git分支在交互式rebase操作时的具体案例。 learngitbranching的地址为:https://l
lizelu
2018/03/28
21.2K0
Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase
面试字节时:合并分支中 rebase 和 merge 的区别?
实际开发工作的时候,我们都是在自己的分支开发,然后将自己的分合并到主分支,那合并分支用2种操作,这2种操作有什么区别呢?
zz_jesse
2023/12/14
3240
面试字节时:合并分支中 rebase 和 merge 的区别?
如何使用 Git Rebase 优雅回退代码?
使用命令 git revert commit_id 能产生一个 与 commit_id 完全相反的提交,即在 log 中会看到一条新的提交 new_commit_id, revert 提交就是删除 commit_id 的提交。
Yorkyu
2022/03/22
5.1K0
如何使用 Git Rebase 优雅回退代码?
净化Git之rebase变基的使用
git rebase能够将分叉的分支重新合并,之前写过一篇文章介绍它的原理,下面主要介绍它的两个使用场景:
sunsky
2020/08/20
1.4K0
merge和rebase的区别
我从用git就一直用rebase,但是新的公司需要用merge命令,我不是很明白,所以查了一些资料,总结了下面的内容,如果有什么不妥的地方,还望指正,我一定虚心学习。
爱撸猫的杰
2019/03/28
2.1K0
merge和rebase的区别
git-merge 和 git-rebase 原理解析与实践分享
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2025/01/22
4550
git-merge 和 git-rebase 原理解析与实践分享
Merge vs Rebase
git rebase命令经常被认为是Git巫术,初学者应该远离它,但它实际上可以让开发团队在使用时更加轻松。在本文中,我们将git rebase与相关git merge命令进行比较。
银河1号
2019/04/12
1.8K0
Merge vs Rebase
Git -- Rebase
git rebase: 这个命令可以把一个分支上commit的变化放到另一个分支上重新上演一遍. 简单的Rebase例子. 首先准备好一个git项目. 做一个feature分支, 然后做几个commi
solenovex
2018/03/29
8300
Git -- Rebase
带你理解 Git 中的 Merge 和 Rebase
Rebase 和 merge 都被设计用来将变更从一个分支整合到另一个分支,但是它们的实现方式却不同。
savokiss
2019/11/06
1.7K0
带你理解 Git 中的 Merge 和 Rebase
原创 | git rebase的时候捅娄子了,怎么办?在线等……
我闯过,我闯的第一个祸就是使用git rebase造成的,虽然后来最终还是解决了,但是还是给我吓得不轻。当时的事情是这样的。
TechFlow-承志
2020/10/27
1.5K0
原创 | git rebase的时候捅娄子了,怎么办?在线等……
姐姐问我什么是变基操作(git-rebase)
话说,我和姐姐的缘分是在那一个月黑风高的晚上,啪,姐姐一巴掌打在了我的脸上并说了一句:能不能讲重点~~~。哈哈,不开玩笑了,直接说重点吧。我们先来看一个场景,我查看了一下我github上的个人仓库,commit提交次数很多,提交内容如下:
Golang梦工厂
2022/07/08
6640
姐姐问我什么是变基操作(git-rebase)
Git使用规范及命令
rebase没有产生新的节点,使用rebase的git演进路线(提交树)是一直向前的,这样在版本回退时也很容易;用merge的git路线是跳跃的,可以明确的知道是从哪个分支或节点修改的。
用户9645905
2024/06/02
1780
Git使用规范及命令
彻底搞懂 Git-Rebase
来源:http://jartto.wang/2018/12/11/git-rebase/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutia
程序猿DD
2018/12/28
5.2K0
相关推荐
Git rebase 使用场景分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档