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

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]

如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~

这三个确实非常像,以至于对于初学者来说比较难理解。

总结对比

先给出对比:

特性git mergegit rebasegit cherry-pick
功能合并分支,保留历史重新应用提交,使历史线性化挑选特定提交,复制到另一个分支
提交顺序保留分支的分叉和合并点改变提交顺序,使历史线性化不改变提交顺序,仅复制指定提交
哈希值不改变原始提交哈希值改变原始提交哈希值生成新的提交哈希值
历史清晰度保留分支历史,适合多人协作线性化历史,适合个人开发灵活挑选提交,但可能使历史复杂
适用场景合并分支,保留完整历史更新分支,清理提交历史将特定修复或功能应用到其他分支
可视化结果https://learngitbranching.js.org/?NODEMO=&locale=zh_CNhttps://learngitbranching.js.org/?NODEMO=&locale=zh_CNhttps://learngitbranching.js.org/?NODEMO=&locale=zh_CN
是否创建新提交创建合并提交(merge commit)重新应用提交,生成新的提交复制指定提交,生成新的提交
是否修改历史不修改历史修改历史,重新应用提交修改历史,复制指定提交
冲突处理合并冲突,解决后完成合并逐个解决冲突,继续变基逐个解决冲突,继续挑选提交

可视化理解

假设我们有以下的提交历史:

A -- B -- C [main]\D -- E [feature]
  • main 分支包含提交 A、B 和 C。

  • feature 分支从 main 的 B 提交分叉,包含提交 D 和 E。

1. 使用 git merge

如果我们在 main 分支上运行 git merge feature,Git 会创建一个新的合并提交,将 feature 分支的更改合并到 main 分支。

可视化结果:

A -- B -- C -- F [main]\       /D -- E [feature]
  • F 是一个新的合并提交,表示 mainfeature 分支的合并。

  • 提交历史保留了分支的分叉和合并点,适合多人协作场景。


2. 使用 git rebase

如果我们在 feature 分支上运行 git rebase main,Git 会将 feature 分支的提交 D 和 E 重新应用到 main 分支的最新提交 C 上。

可视化结果:

A -- B -- C [main]\D' -- E' [feature]
  • 提交 D 和 E 被重新应用到 C 上,生成了新的提交 D' 和 E'。

  • 提交历史变得更加线性,适合个人开发或清理提交历史的场景。


3. 使用 git cherry-pick

假设我们只想将 feature 分支上的提交 E 应用到 main 分支,可以在 main 分支上运行 git cherry-pick E

可视化结果:

A -- B -- C -- E' [main]\D -- E [feature]
  • 提交 E 被复制到 main 分支上,生成了新的提交 E'。

  • 提交历史中只包含了被挑选的提交,适合将特定修复或功能应用到另一个分支的场景。


个人理解

  • git merge 适合大部分情况,谁拉取了、做了几次提交、合并到了什么位置等,都非常清晰;
  • git rebase 适合个人开发者。虽然它能把记录拉成一条直线,但对于团队开发而言,在看谁修改了哪部分的时候就懵逼了,非常不直观;
  • git cherry-pick 适合在分支上做了一系列修改,不想把这么多提交都放到主分支上去的时候用。只需要把分支上最终的提交拿到主分支就可以了。也比较清晰。

因此,我觉得: merge > cherry-pick >> rebase

操作示例

1. git merge 示例

# 切换到 main 分支
git checkout main# 合并 feature 分支
git merge feature

2. git rebase 示例

# 切换到 feature 分支
git checkout feature# 将 feature 分支的提交重新应用到 main 分支
git rebase main

3. git cherry-pick 示例

# 切换到 main 分支
git checkout main# 挑选 feature 分支上的提交 E
git cherry-pick E

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6899.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot开发(三)SpringBoot介绍、项目创建、运行

1. SpringBoot 1.1. SpringBoot介绍 Spring Boot给世界程序员带来了春天,越来越多的企业选择使用spring boot来开发他们的软件,因此学习spring boot是科技发展的必然趋势。本门课程将从web最基础的知识点开始讲起,逐步带你攻破spring boot的…

438. 找到字符串中所有字母异位词

【题目】&#xff1a;438. 找到字符串中所有字母异位词 class Solution { public:vector<int> findAnagrams(string s, string p) {vector<int> res;vector<int> curVec(26, 0); // 统计p中字母出现的次数for(char c : p) {curVec[c - a];}for(int l 0, r …

Leetcode-两数之和

1.暴力枚举 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int lennums.size();int i,j;for(i0;i<len;i){for(ji1;j<len;j){if(nums[i]nums[j]target){return{i,j};}}}return {i,j};} }; 新知识&#xff1a; return {…

边缘网关具备哪些功能?

边缘网关&#xff0c;又称边缘计算网关&#xff0c;部署在网络边缘&#xff0c;它位于物联网设备与云计算平台之间&#xff0c;充当着数据流动的“守门员”和“处理器”。通过其强大的数据处理能力和多样化的通信协议支持&#xff0c;边缘网关能够实时分析、过滤和存储来自终端…

高等数学学习笔记 ☞ 微分方程

1. 微分方程的基本概念 1. 微分方程的基本概念&#xff1a; &#xff08;1&#xff09;微分方程&#xff1a;含有未知函数及其导数或微分的方程。 举例说明微分方程&#xff1a;&#xff1b;。 &#xff08;2&#xff09;微分方程的阶&#xff1a;指微分方程中未知函数的导数…

【优选算法】9----长度最小的子数组

----------------------------------------begin-------------------------------------- 铁子们&#xff0c;前面的双指针算法篇就算告一段落啦~ 接下来是我们的滑动窗口篇&#xff0c;不过有一说一&#xff0c;算法题就跟数学题一样&#xff0c;只要掌握方法&#xff0c;多做…

计算机网络之链路层

本文章目录结构出自于《王道计算机考研 计算机网络_哔哩哔哩_bilibili》 02 数据链路层 在网上看到其他人做了详细的笔记&#xff0c;就不再多余写了&#xff0c;直接参考着学习吧。 1 详解数据链路层-数据链路层的功能【王道计算机网络笔记】_wx63088f6683f8f的技术博客_51C…

Kubernetes v1.28.0安装dashboard v2.6.1(k8s图形化操作界面)

准备工作 Kubernetes v1.28.0搭建教程请参考&#xff1a;Kubernetes v1.28.0集群快速搭建教程-CSDN博客 查看当前集群nodes都是ready状态 查看当前pods都是running状态 下载并修改配置文件 下载 recommended.yaml &#xff0c;下载好之后&#xff0c;进入文件编辑 下载地址…

Spring 框架:配置缓存管理器、注解参数与过期时间

在 Spring 框架中&#xff0c;可通过多种方式配置缓存具体行为&#xff0c;常见配置方法如下。 1. 缓存管理器&#xff08;CacheManager&#xff09;配置 基于内存的缓存管理器配置&#xff08;以SimpleCacheManager为例&#xff09; SimpleCacheManager 是 Spring 提供的简单…

2025.1.21——六、BUU XSS COURSE 1 XSS漏洞|XSS平台搭建

题目来源&#xff1a;buuctf BUU XSS COURSE 1 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;输入框尝试一下 step 2&#xff1a;开始xss注入 step 3&#xff1a;搭建平台 step 4&#xff1a;利用管理员cookie访问地址 三、小结 二编&#…

基于Python机器学习的双色球数据分析与预测

python统计分析2003-2024年所有的中奖记录,通过人工智能机器学习预测双色球,个人意见,仅供参考. 声明&#xff1a;双色球具有随机性&#xff0c;任何工具无法预测。本文章仅作为技术交流&#xff0c;提供学习参考。本文所涉及的代码均为python之机器学习的代码。双色球为公益事…

警企联动齐发力、共筑反诈“防护墙”

2025年1月10日是第五个中国人民警察节,南通移动联合南通公安反诈中心,深入社区商圈,开展防范电信网络诈骗宣传活动,进一步增强广大人民群众的反诈意识和能力,全力守护好群众的“钱袋子”。 当日,活动现场一大早就呈现出一片忙碌景象,工作人员支起摊位,将各类精心制作的反诈宣传…

mysql 学习3 SQL语句--整体概述。SQL通用语法;DDL创建数据库,查看当前数据库是那个,删除数据库,使用数据库;查看当前数据库有哪些表

SQL通用语法 SQL语句分类 DDL data definition language : 用来创建数据库&#xff0c;创建表&#xff0c;创建表中的字段&#xff0c;创建索引。因此成为 数据定义语言 DML data manipulation language 有了数据库和表以及字段后&#xff0c;那么我们就需要给这个表中 添加数…

九、CSS工程化方案

一、PostCSS介绍 二、PostCSS插件的使用 项目安装 - npm install postcss-cli 全局安装 - npm install postcss-cli -g postcss-cli地址&#xff1a;GitHub - postcss/postcss-cli: CLI for postcss postcss地址&#xff1a;GitHub - postcss/postcss: Transforming styles…

Baklib助力企业如何搭建内容中台的全新策略解析

内容概要 在当今快速变化的商业环境中&#xff0c;企业面临着数据爆炸和信息管理的巨大挑战。内容中台作为一种新兴的管理理念&#xff0c;专注于内容的集中管理与高效利用&#xff0c;旨在帮助企业优化信息流动&#xff0c;提高工作效率。通过构建一个灵活、可扩展的内容中台…

AR智慧点巡检系统探究和技术方案设计

一、项目背景 随着工业生产规模的不断扩大和设备复杂度的提升&#xff0c;传统的人工点巡检方式效率低下、易出错&#xff0c;难以满足现代化企业对设备运行可靠性和安全性的要求。AR&#xff08;增强现实&#xff09;技术的发展为点巡检工作带来了新的解决方案&#xff0c;通…

LabVIEW项目中的工控机与普通电脑选择

工控机&#xff08;Industrial PC&#xff09;与普通电脑在硬件设计、性能要求、稳定性、环境适应性等方面存在显著差异。了解这些区别对于在LabVIEW项目中选择合适的硬件至关重要。下面将详细分析这两种设备的主要差异&#xff0c;并为LabVIEW项目中的选择提供指导。 ​ 硬件设…

计算机图形学:实验四 带纹理的OBJ文件读取和显示

一、程序功能设计 在程序中读取带纹理的obj文件&#xff0c;载入相应的纹理图片文件&#xff0c;将带纹理的模型显示在程序窗口中。实现带纹理的OBJ文件读取与显示功能&#xff0c;具体设计如下&#xff1a; OBJ文件解析与数据存储 通过实现TriMesh类中的readObj函数&#x…

C# OpenCV机器视觉:红外体温检测

在一个骄阳似火的夏日&#xff0c;全球却被一场突如其来的疫情阴霾笼罩。阿强所在的小镇&#xff0c;平日里熙熙攘攘的街道变得冷冷清清&#xff0c;人们戴着口罩&#xff0c;行色匆匆&#xff0c;眼神中满是对病毒的恐惧。阿强作为镇上小有名气的科技达人&#xff0c;看着这一…

PAT甲级-1020 Tree Traversals

题目 题目大意 给出一棵树的后序遍历和中序遍历&#xff0c;要求输出该树的层序遍历。 思路 非常典型的树的构建与遍历问题。后序遍历和中序遍历可以得出一个树的结构&#xff0c;用递归锁定根节点&#xff0c;然后再遍历左右子树&#xff0c;我之前发过类似题目的博客&…