Git整合分支的两种方法——合并(git merge)与变基(git rebase)的区别

article/2025/9/28 21:21:32

转载者总结了下原文的关键句,补充了几个相关链接,得到本文。

文章目录

    • Git整合分支的两种方法
      • 1、合并(git merge)
      • 2、变基(git rebase)
    • 用例子理解 合并(git merge)与变基(git rebase)的区别
      • 合并(git merge)
      • 变基(git rebase)
    • 总结
    • 参考

Git整合分支的两种方法

在这里插入图片描述

1、合并(git merge)

可以先看这篇文章先理解下Git的合并:Git:合并分支----git merge命令应用的三种情景_Samven_7的博客-CSDN博客
按照上图,这里是非快进的合并。
整合分支最容易的方法是 merge 命令。 它会把两个分支的最新快照(C3 和 C4)以及二者最近的共同祖先(C2)进行三方合并,合并的结果是生成一个新的快照(并提交)。

命令:

# 合并指定分支到当前分支
$ git merge <branch>

2、变基(git rebase)

其实,还有一种方法:你可以提取在 C4 中引入的补丁和修改,然后在 C3 的基础上应用一次。 在 Git 中,这种操作就叫做 变基(rebase)。 你可以使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。

命令:

# 将主题分支<topicbranch>变基到目标分支<basebranch>上。
# 即提取在<topicbranch>上的补丁和修改,然后在<basebranch>的基础上应用一次。
$ git rebase <basebranch> <topicbranch>
或者
$ git switch <topicbranch>
$ git rebase <basebranch>

用例子理解 合并(git merge)与变基(git rebase)的区别

在这里插入图片描述

合并(git merge)

$ git switch master
$ git merge experiment# 没有冲突时不需要下方的命令。有冲突时,就修改冲突文件,再add然后commit该文件,如下:
$ git add readme.txt 
$ git commit -m "conflict fixed"

执行完上方的命令,达到下图效果:
在这里插入图片描述
此时可以删除dev分支:

$ git branch -d dev

变基(git rebase)

1、执行变基命令

# 提取在 experiment分支 中引入的补丁和修改,然后在 master分支 的基础上应用一次。
$ git rebase master experiment	
或者
$ git switch experiment
$ git rebase master

GitHub 解决 Git 变基后的合并冲突_w3cschool

变基的原理是首先找到这两个分支(即当前分支 experiment、变基操作的目标基底分支 master) 的最近共同祖先 C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件, 然后将当前分支指向目标基底 C3, 最后以此将之前另存为临时文件的修改依序应用。

执行完上方的命令,达到下图效果:
在这里插入图片描述
2、“快进”(无冲突)的合并

$ git switch master
$ git merge experiment

执行完上方的命令,达到下图效果:
在这里插入图片描述
3、此时可以删除dev分支:

$ git branch -d dev

要用变基得遵守一条准则:如果提交存在于你的仓库之外,而别人可能基于这些提交进行开发,那么不要执行变基。
也就是说,只对尚未推送或分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行变基操作,这样,你才能享受到两种方式(变基 、 合并)带来的便利。

总结

这两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。 你在查看一个经过变基的分支的历史记录时会发现,尽管实际的开发工作是并行的, 但它们看上去就像是串行的一样,提交历史是一条直线没有分叉。

一般我们这样做的目的是为了确保在向远程分支推送时能保持提交历史的整洁——例如向某个其他人维护的项目贡献代码时。 在这种情况下,你首先在自己的分支里进行开发,当开发完成时你需要先将你的代码变基到 origin/master 上,然后再向主项目提交修改。 这样的话,该项目的维护者就不再需要进行整合工作,只需要快进合并便可。

请注意,无论是通过变基,还是通过三方合并,整合的最终结果所指向的快照始终是一样的,只不过提交历史不同罢了。 变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把最终结果合在一起。

参考

转载自:Git - 变基

上文的两个链接:
Git:合并分支----git merge命令应用的三种情景_Samven_7的博客-CSDN博客
GitHub 解决 Git 变基后的合并冲突_w3cschool


http://chatgpt.dhexx.cn/article/riF49OiG.shtml

相关文章

git 分支合并(dev合并到master分支)

前景&#xff1a;在项目开发中&#xff0c;经常会多分支协作开发&#xff0c;所以就会遇到分支合并等问题。以下用例是将dev分支合并到master分支 1. 对当前dev分支的本地代码进行储存 1.1 如当前代码未编辑完&#xff0c;不想提交&#xff0c;即可将当前dev分支的代码暂存 gi…

Git 分支合并代码

Git 分为哪几个区&#xff1a; https://blog.csdn.net/qq_36672905/article/details/82776283 Git的区域分为 工作区、暂存区、本地仓库区 工作区&#xff08;work directory&#xff09;&#xff1a;一般就是我们项目的根目录。 本地仓库&#xff08;repository&#xff0…

git将一个分支的提交合并到另一个分支

git将一个分支的提交合并到另一个分支 Git合并指定文件到另一个分支。 经常被问到如何从一个分支合并特定的文件到另一个分支。其实&#xff0c;只合并你需要的那些commits&#xff0c;不需要的commits就不合并进去了。 1. 合并某个分支上的单个commit 首先&#xff0c;用g…

Git分支合并到另外一个分支

注意&#xff1a;不能在分支节点再新建分支节点&#xff0c;及时新建了成功了&#xff0c;分支节点也是基于master去建立的。&#xff08;已验证&#xff09; 下面来提一个需求: 需要新建两个分支&#xff0c;一个是test1另外一个是test2&#xff0c;首先在test1上开发&#…

git查看分支、创建分支、合并分支

一、查看的git命令如下&#xff1a; git branch 列出本地已经存在的分支&#xff0c;并且当前分支会用*标记 git branch -r 查看远程版本库的分支列表 git branch -a 查看所有分支列表&#xff08;包括本地和远程&#xff0c;remotes/开头的表示远程分支&#xff09; git bran…

git合并分支总结(一看就懂哟)

1.主分支&#xff1a;在本地先拉取最新代码&#xff0c;提交&#xff08;commit&#xff09;到本地&#xff0c;推送&#xff08;push&#xff09;到云端 --下图是idea中提交到本地&#xff0c;未推送到云端的提示&#xff1a; 2.小分支&#xff1a;在本地先拉取最新代码&…

git如何把其他分支的合并到主分支上,主分支的合并到其他分支上

master&#xff1a;主分支 other&#xff1a;其他分支 首先查看分支 git branch如果分支在主分支上忽略此步&#xff0c;如果不在切换分支 git checkout other在other分支上拉取代码 git pull最重要的一步&#xff0c;拉完代码后&#xff0c;在切换到master分支上&#xff…

git merge合并分支

一、本文是从master分支拉出的two&#xff0c;然后合并回master 1、切换到master分支&#xff1a;git checkout master 2、创建并切换到two分支&#xff1a;git checkout -b two 3、将two分支push到远程仓库&#xff08;与本地仓库同步&#xff09;&#xff1a;git push ori…

git分支的合并

原文&#xff1a; http://gitbook.liuhui998.com/3_3.html http://gitbook.liuhui998.com/5_3.html 一、如何分支的合并 在git中&#xff0c;可以使用 git merge 和 git rebase 两个命令来进行分支的合并。 git merge 和 git rebase 在大体上都差不多&#xff0c;下文主要以g…

Git提交本地代码至分支及合并分支到总分支

Git提交本地代码至分支 前言一、查看分支二、本地新建分支三、切换到新分支四、创建并切换分支五、将新分支推送到gitlab六、删除分支七、git 提交本地代码至新分支八、将分支代码合并到总分支 前言 git版本控制工具和svn差不多&#xff0c;可选择的远程库有github、gitlab、g…

git怎么合并两个分支

git怎么合并分支代码 1.git 命令 注意: 第一步你得把当前分支合到远程分支去才能有下面的操作 另外我是将develop分支代码合并到release分支去1.推完代码到远程仓库查看本地分支(如果推错分支代码那么请将分支切到刚刚推送上去代码的分支在来进行下面的操作) git branch2.切…

【剑指offer】【java】变态跳台阶

题目 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路 1.这里计算的是跳法数 而不是跳的次数 2.用递归解决 代码 public class Solution {public int JumpFloorII(int target) {if (target…

接了个变态需求:生成 Excel + PDF 导出,用 Java 怎么实现?

一、序言 Excel、PDF的导出、导入是我们工作中经常遇到的一个问题&#xff0c;刚好今天公司业务遇到了这个问题&#xff0c;顺便记个笔记以防下次遇到相同的问题而束手无策。 公司有这么两个需求&#xff1a; 需求一、给了一个表单&#xff0c;让把查出来的数据组装到表单中…

Java面试题目和答案

Java面向对象有哪些特征&#xff0c;如何应用 ​ 面向对象编程是利用类和对象编程的一种思想。万物可归类&#xff0c;类是对于世界事物的高度抽象 &#xff0c;不同的事物之间有不同的关系 &#xff0c;一个类自身与外界的封装关系&#xff0c;一个父类和子类的继承关系&…

浅析Java多态

Java多态 今天来谈谈Java中的多态&#xff0c;作为面向对象的一大特性&#xff0c;它的重要性不必多说&#xff0c;相比其他两特性&#xff08;继承、封装&#xff09;从字面上看就有点不易读懂&#xff0c;多种态度还是有多变态&#xff1f; 官解 官方解释&#xff1a; 多态…

java连连看小游戏

目录 运行界面图 代码如下&#xff08;示例&#xff09;&#xff1a; 2.运行演示 这是一个用java编写的小游戏&#xff0c;连连看是一种消除类益智游戏&#xff0c;核心要求是在规定的时间内&#xff0c;消除游戏界面中选中的两张相同的图案&#xff0c;直至完全消除所有图案…

南阳ACM 题目811:变态最大值 Java版

变态最大值 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB 难度&#xff1a;1 描述 Yougth讲课的时候考察了一下求三个数最大值这个问题&#xff0c;没想到大家掌握的这么烂&#xff0c;幸好在他的帮助下大家算是解决了这个问题&#xff0c;但是问题又来了。…

线程池的好处

线程池的好处: 一.降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。&#xff08;当线程run方法使用完毕后&#xff0c;下一个线程不用再次创建&#xff0c;直接利用上一个线程&#xff09; 二.提高响应速度。当任务到达时&#xff0c;任务可以不需要等到…

详解线程池的作用及Java中如何使用线程池

服务端应用程序&#xff08;如数据库和 Web 服务器&#xff09;需要处理来自客户端的高并发、耗时较短的请求任务&#xff0c;所以频繁的创建处理这些请求的所需要的线程就是一个非常消耗资源的操作。常规的方法是针对一个新的请求创建一个新线程&#xff0c;虽然这种方法似乎易…

线程池作用及Executors方法讲解

线程池的作用: 线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况&#xff0c;可以自动或手动设置线程数量&#xff0c;达到运行的最佳效果&#xff1b;少了浪费了系统资源&#xff0c;多了造成系统拥挤效率不高。用线程池控制线程数量&#xff0c;其他线程排…