首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >git 中 merge 和 rebase 小记

git 中 merge 和 rebase 小记

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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
运行
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • git pull 发生了什么?
  • git rebase
  • 关于 git merge 和 git rebase 的小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档