git rebase 举例

Git Rebase ❗ 不要对已经 push 给别人的分支做 rebase(除非你非常清楚自己在干啥,并且团队都同意)。Rebase = 把一段提交“剪下来”,贴到另一个 commit 后面,并重新生成新的提交。A' 是一个全新的 commit(hash 不同), 但它包含 A~F 的所有代码改动。自己在本地开发的分支,还没 push 或只有你一个人用 → 随便 rebase。把你这一串提交,剪下来,贴到别的 commit 后面,再重新排一遍。Rebase 过程中,如果有冲突,Git 会停下来,让你解决。 阅读详情

介绍

前面看到的 git merge 保持了 main / feature_1 原始节点的一致性,代价就是多了一个 merge 节点
那是否有方法可以不要有这些 merge 看起来“无用”的节点呢?那就用到了 rebase 方案

操作步骤

$ git checkout feature_1b
Switched to branch 'feature_1b'
Your branch is up to date with 'origin/feature_1b'.
$ 
$ git log
commit 33063bff55e8d7142a2210a6973455abc98ec431 (HEAD -> feature_1b, origin/feature_1b)
Author: powertest
Date:   Tue Feb 3 08:40:22 2026 +0000

    Initial commit
$ touch feature_1b.c
$ echo feature_1b > feature_1b.c 
$ git status
On branch feature_1b
Your branch is up to date with 'origin/feature_1b'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature_1b.c

nothing added to commit but untracked files present (use "git add" to track)
$ git add .
$ git commit -m "Add feature_1b.c"
[feature_1b 8c2dda5] Add feature_1b.c
 1 file changed, 1 insertion(+)
 create mode 100644 feature_1b.c
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 298 bytes | 298.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: 
remote: To create a merge request for feature_1b, visit:
remote:   http://gitlab.powertest.com.cn/powertest/test-git-feature-1/-/merge_requests/new?merge_request%5Bsource_branch%5D=feature_1b
remote: 
To ssh://gitlab.powertest.com.cn:12022/powertest/test-git-feature-1.git
   33063bf..8c2dda5  feature_1b -> feature_1b
$ git log
commit 8c2dda57b712347a8108e5a4278a4bbbff54fb52 (HEAD -> feature_1b, origin/feature_1b)
Author: powertest
Date:   Tue Feb 3 18:02:15 2026 +0800

    Add feature_1b.c

commit 33063bff55e8d7142a2210a6973455abc98ec431
Author: powertest
Date:   Tue Feb 3 08:40:22 2026 +0000

    Initial commit
$ git log  --oneline --graph
* 8c2dda5 (HEAD -> feature_1b, origin/feature_1b) Add feature_1b.c
* 33063bf Initial commit
$ git rebase main
Successfully rebased and updated refs/heads/feature_1b.
$ git status
On branch feature_1b
Your branch and 'origin/feature_1b' have diverged,
and have 2 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

nothing to commit, working tree clean
$ git log
commit 0b8b109c1d9d5df04baddb68b6493c81e5665823 (HEAD -> feature_1b)
Author: powertest
Date:   Tue Feb 3 18:02:15 2026 +0800

    Add feature_1b.c

commit a079cfa408b94e871796efc799a58b7f6ad011f1 (origin/main, origin/HEAD, main)
Author: powertest
Date:   Tue Feb 3 17:09:22 2026 +0800

    Add main.c

commit 33063bff55e8d7142a2210a6973455abc98ec431
Author: powertest
Date:   Tue Feb 3 08:40:22 2026 +0000

    Initial commit
$ git rebase --continue
fatal: No rebase in progress?
$ git log  --oneline --graph
* 0b8b109 (HEAD -> feature_1b) Add feature_1b.c
* a079cfa (origin/main, origin/HEAD, main) Add main.c
* 33063bf Initial commit
$ git push
To ssh://gitlab.powertest.com.cn:12022/powertest/test-git-feature-1.git
 ! [rejected]        feature_1b -> feature_1b (non-fast-forward)
error: failed to push some refs to 'ssh://gitlab.powertest.com.cn:12022/powertest/test-git-feature-1.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

$ git push --force-with-lease origin feature_1b
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 333 bytes | 333.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: 
remote: To create a merge request for feature_1b, visit:
remote:   http://gitlab.powertest.com.cn/powertest/test-git-feature-1/-/merge_requests/new?merge_request%5Bsource_branch%5D=feature_1b
remote: 
To ssh://gitlab.powertest.com.cn:12022/powertest/test-git-feature-1.git
 + 8c2dda5...0b8b109 feature_1b -> feature_1b (forced update)
$ git log
commit 0b8b109c1d9d5df04baddb68b6493c81e5665823 (HEAD -> feature_1b, origin/feature_1b)
Author: powertest
Date:   Tue Feb 3 18:02:15 2026 +0800

    Add feature_1b.c

commit a079cfa408b94e871796efc799a58b7f6ad011f1 (origin/main, origin/HEAD, main)
Author: powertest
Date:   Tue Feb 3 17:09:22 2026 +0800

    Add main.c

commit 33063bff55e8d7142a2210a6973455abc98ec431
Author: powertest
Date:   Tue Feb 3 08:40:22 2026 +0000

    Initial commit

优缺点比较

通过上面我们可以看出,rebase 方案的 rebase 的含义,将整个记录从树型结构变成了线型结构,代价就是部分节点的值发生了变化。如果分支别人正在并行开发,将会给别人造成很大的问题。
所以个人研发分支不跟别人共用的化可以使用 rebase 方案,共用分支的修改用 merge

Git Rebase的使用 然而,在使用rebase时需要谨慎,特别是在处理公共分支时,避免因误操作导致的历史记录混乱。Git rebase是Git版本控制系统中的一个重要工具,用于重写提交历史,整合分支。在公共分支上rebase会改变提交历史,导致其他开发者的提交记录失效。不同,rebase不会创建新的合并提交,而是重新应用提交,以确保项目历史看起来像是线性的。在功能分支上工作时,经常需要保持与主分支同步。Git rebase是将一个分支上的所有提交移动到另一个分支的末端的过程。会创建一个新的合并提交,保留所有分支的提交历史。 阅读详情

相关推荐

Git的Rebase操作,手动Rebase时主分支的提交记录的保留规则

是 Git 中用于重新应用分支上的提交的命令,主要用于整理和优化项目历史记录。它将一个分支的提交移到另一个分支的基础之上,从而创建一个线性历史记录。

十三月的博客 1397

【git】rebase的作用(举例说明)

生成一条完美的git提交log

大胡子老哥的博客 223

基于Simulink的魔术公式轮胎动力学仿真

本篇博文主要用来记录汽车系统动力学课程的学习,仅供课程阶段参考,与实际工程应用还有较大距离。基于Simulink的魔术公式轮胎动力学仿真本实例主要有以下任务。1.建立魔术公式轮胎动力学仿真模型。2.绘制不同载荷下的轮胎纵向力—滑动率关系曲线。3.绘制不同载荷下的轮胎侧向力—侧偏角关系曲线。4.绘制不同载荷下的轮胎回正力矩—侧偏角关系曲线。提示:以下是本篇文章正文内容,下面案例可供参考。

shy_201992的博客 6940

git rebase的作用

rebase操作可以把本地未push的分叉提交历史整理成直线,就是说可以合并多次commit,这样我们在查看历史提交的变化时更容易。 什么是把提交历史整理成直线? 举一个例子:它就是ide里面的这个: 大家都懂吧~~~ 可以看出有交叉的地方,使用rebase可以整理成直线~~~ 我一般不用rebase~~~~哈哈哈~~~~,想使用的小伙伴可以了解一下哦~~ 如果大家看完本文后还是不理解rebase能干啥,请看廖雪峰的官方网站https://www.liaoxuefeng.com/wiki/8

lgz0921的博客 2557

六轴机械臂正逆解计算

机械臂运动学就是。包括(Forward Kinematics)和(InverseKinematics)两部分。正运动学就是逆运动学则是关节变量->机械臂末端执行器的姿势=正向运动学机械臂未端执行器的位姿->关节变量=逆向运动学。

gaoxiaochan的博客 1万+

HarmonyOS逆向降级实战:从鸿蒙2.0回退至EMUI 10.1的完整路径解析

本文详细解析了从HarmonyOS 2.0逆向降级至EMUI 10.1的完整操作流程,涵盖必备工具准备、数据备份策略及阶梯式降级步骤。针对华为手机用户遇到的兼容性问题,提供HiSuite和HiSuite Proxy工具的具体使用方法,并分享降级失败应急处理与系统优化技巧,帮助用户安全高效完成系统回退。

weixin_27741699的博客 1902

git操作之git rebase

git rebase可以简单的理解为调整commit信息,包括合并commit信息到master(与merge类似,但是效果不同)以及删除commit信息或者修改log信息等,下面分别介绍几种git rebase常用的场景。合并commit信息到master例如有如下commit信息并且当前处于topic分支: A---B---C topic / D---E---F---G ma

fangjian1204的专栏 1682

Camera tuning flow相机调试流程

相机调试流程分为三大模块:ProcessRaw处理原始数据(黑电平校正、阴影校正),3A实现自动控制(曝光/对焦/白平衡),ISP进行图像精加工(伽马校正、锐化降噪、色彩处理)。三个阶段环环相扣,前阶段为后阶段提供基础,最终输出画质优良且风格化的图像。

weixin_64706696的博客 1230

git中rebase和merge的区别

Git中的rebase(变基)和merge(合并)是两种不同的分支整合方式,主要区别在于提交历史的处理: Merge保留完整历史,创建合并提交,适合公共分支整合,是非破坏性操作。 Rebase重写历史,形成线性提交,适合本地分支整理,但需避免对已推送分支使用。 建议工作流:本地开发时用rebase保持同步,合并到主分支时用merge --no-ff保留合并记录。核心原则是不要对已共享的分支变基,以免破坏协作历史。

独断万码 1307

智能车竞赛走马观碑组:赛道元素与目标板识别策略解析

本文深入解析了智能车竞赛走马观碑组别的核心挑战与策略。重点探讨了如何应对PVC赛道的光照、磨损及无边界线等复杂环境,并详细阐述了基于红色引导区的目标板高效识别流程。通过平衡轻量化模型选择、实时决策与精准控制,实现赛道元素适应性与目标板识别策略的优化,为参赛者提供了一套完整的系统集成与实战调参思路。

x8y9z0的博客 461

vxWorks下dosFs文件系统的创建

文件系统,是指操作系统根据目录和文件的组织形式在磁盘设备上应用的一种设备驱动,不同的文件系统对目录和文件有不同的限制(如目录名限制,文件大小限制等)。VxWorks支持多种文件系统,比较重要的有:1、dosFs:适用于块存取设备(比如硬盘、软盘),和MS-DOS文件系统兼容;2、rawFs:提供了一种简单的原始文件系统。该文件系统将整个硬盘当作一个单独的大文件;3、cdromFs:允许系统从按照I

技术联盟 1万+

【Git系列】rebase的使用场景

Rebase 是 Git 版本控制系统中的一种操作,它用于将一个分支的修改应用到另一个分支上。Rebase 的主要目的是将分支的提交历史整理成一条直线,使得项目的提交历史更加清晰、整洁。通常情况下,你可以在以下情况使用 rebase:合并分支:当你想要将一个分支的修改合并到另一个分支上时,可以使用 rebase。通过 rebase,你可以将待合并分支的修改应用到目标分支上,从而在目标分支上形成一个干净的提交历史。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 1万+

2.1 amdgpu BO的类型和用途

AMDGPU驱动中,amdgpu_bo_create_user和amdgpu_bo_create_kernel分别用于创建用户空间和内核空间的buffer对象(BO)。用户空间BO支持元数据、tiling flags等属性,由GEM handle管理生命周期;内核BO则用于驱动内部资源如ringbuffer,自动pin并可选CPU映射。二者在返回类型、生命周期管理和使用场景上存在根本差异,前者面向图形渲染/AI等应用,后者服务于驱动内部任务。

图形/计算GPU的驱动与虚拟化技术分享园地 2211

彻底搞懂git rebase命令

使用 Git 已经好几年了,却始终只是熟悉一些常用的操作。对于 Git Rebase 却很少用到,直到这一次,不得不用。 一、起因 上线构建的过程中扫了一眼代码变更,突然发现,commit提交竟然多达62次。我们来看看都提交了什么东西: 这里我们先不说git提交规范,就单纯这么多次无用的commit就很让人不舒服。可能很多人觉得无所谓,无非是多了一些提交纪录。 然而,并非如此,你可能听过破窗效应,编程也是如此! 二、导致问题 1.不利于代码review 设想一下,你要做code...

只为成功找方法 不为失败找借口 1万+

103:vue+cesium 设置球体水部分颜色为黄色

本示例在 Vue + cesium 项目中设置球体水部分颜色为黄色。这里的操作是将球体内部设置为空的,在地球内部添加一个黄色的圆球,这样水的部分就被突出出来了。直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果.

大剑师兰特的GIS世界 626

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

git-rebase看这一篇就可以了

前言 哈喽,everybody,不知不觉8天的小长假也接近了尾声,玩耍了这么多天,今天也要收一收心,开始学习了呦~。明天就要上班啦,今天姐姐突然问我git-rebase指令是干什么的,怎么用?其实我是不想给他讲的,但是还是没有逃过姐姐的软磨硬泡,那么我们就一起来看一看什么是git-rebase吧!!! 缘起 话说,我和姐姐的缘分是在那一个月黑风高的晚上,啪,姐姐一巴掌打在了我的脸上并说了一句:能不能讲重点~~~。哈哈,不开玩笑了,直接说重点吧。我们先来看一个场景,我查看了一下我github上的个人仓库,

qq_39397165的博客 7054

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Git进阶(十八):git rebase详解

rebase使用方法git rebase [基节点]git rebase [基节点] [待变基节点]rebase后面的参数可以是两个,也可以是一个,当rebase为一个参数的时候其实是省略了第二个参数,第二个参数为HEAD指针当前指向的那个节点。

IT全栈 华强工作室 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

git rebase master

git rebase master

小李科技 2827

git rebase的使用

本地开发:在feature分支上进行开发,可以随意使用rebase -i来整理你的本地提交历史。准备集成:当你准备将分支推送到远程并发起 Pull Request 时:# 1. 获取远程最新代码 git fetch origin # 2. 将你的特性分支变基到 origin/main 上,解决可能出现的冲突 git rebase origin/main # 3. (可选) 最后整理一下你的提交,使其逻辑清晰 git rebase -i HEAD~5 # 例如整理最近5次提交 # 4. 推送到远程。

weixin_44794260的博客 1243

Git - Rebase命令介绍

Git rebase 是版本控制系统 Git 中一个功能强大、使用广泛的命令。它用于将一个分支中的改动整合到另一个分支中。rebase与merge不同, merge会创建一个新的提交,而rebase则是将一系列提交移动或合并到一个新的基础提交中。

guoqx的专栏 1591

Git Merge 和 Git Rebase 的区别详解

git merge和git rebase如果你希望保留完整的提交历史,清晰地显示每个分支的更改和合并点,那么git merge是更好的选择。如果你倾向于保持一个清洁、线性的提交历史,并且团队成员对解决冲突感到舒适,那么可以选择git rebase。在团队环境中,最重要的是确保所有成员都理解并遵守相同的工作流程,无论是选择merge还是rebase,都需要谨慎处理冲突并确保团队成员对合并策略达成共识。版权声明:本博客内容为原创,转载请保留原文链接及作者信息。参考文章。

ning的博客 1788

Git: rebase命令

Rebase,中文可以翻译为“变基”。它的核心思想是改变一系列提交的根基。想象一下,你的提交历史是一条直线。当你基于另一个分支(比如main)进行开发时,你的工作就像是从main分支的某个点生长出来的一条新枝。默认情况(Merge):当main分支有新的提交时,如果你使用git merge来合并,会创建一个新的“合并提交”,将两条线连接起来。历史轨迹会忠实地记录下分支和合并的过程。使用 Rebase:它会提取你在当前分支上的所有新提交,“撤销”它们,然后先把你当前分支的基点移动到目标分支(如main。

weixin_42849849的博客 1923

Gitのrebase用法

rebase的基本概念是将一个分支上的改动应用到另一个分支的基础之上。它的作用是将两个分支的提交历史重新整理,使得提交历史看起来像是一条直线,而不是分叉的图形。rebase是一种整合提交历史的工具,使得提交历史更加线性和整洁。它可以减少合并冲突,提高代码管理的效率。使用时需要小心,特别是在公共分支上,确保不会影响其他开发者的工作。通过rebase,您可以更灵活地管理 Git 提交历史,使得项目的版本控制更加高效。Merge和Rebase都是用来整合分支的工具,但它们的实现方式和结果不同。

L0g1c的博客 1245

Git_Rebase

它可以将与另外一个分支的最近的共同提交记录的后的两部分进行变基(重写),并以另外一个分支的提交记录在前,当前分支的提交记录在后的方式,插入到最近共同提交记录的后面,从而创建一个更线性的提交记录。自动变基,仅限于自动合并多个提交到一个提交,他会将带有 fixup 开头信息的提交 都自动合并到指定的提交中。删除这个提交,这个提交的内容也会丢失,如果后面的提交对其中有修改的话,也会产生冲突。我觉得这个提交记录一次性提交了太多东西,我想将这个提交拆成两份,分开提交。后的所有提交记录,并可以通过。

假女吖的博客 1583
上一篇: git merge 举例
下一篇: memleak的使用的方法
天麓
博客等级 码龄22年 323粉丝 437原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值