git merge VS git rebase VS git cherry-pick

news2024/11/24 6:16:17

git merge VS git rebase VS git cherry-pick

在Git中,git mergegit rebasegit cherry-pick都是用于整合不同分支中的更改到当前分支的命令。它们各有特点和适用场景。

Git Merge

git merge 是一种将一个分支的更改合并到另一个分支的方法。它创建一个新的提交,该提交包含来自两个分支的更改。

命令格式:

git merge <branch-name>

示例: 假设你有一个master分支和一个develop分支,要将develop分支合并到master分支,可以执行:

git checkout master
git merge develop

在这里插入图片描述

git 会根据master分支和develop分支的共同祖先(即3号提交)以及这两个分支的最新提交(即6号提交和7号提交)三方合并成一个新的提交(即8号提交)

特点:

  • 历史保留: git merge 会保留分支的历史记录(即保留原有分支的结构和时间顺序)。
  • 合并冲突: 如果有文件在同一位置被修改,则需要手动解决冲突。
  • 快进合并: 当目标分支没有任何提交是源分支所没有时,可以直接进行快进合并。

Git Rebase

git rebase 将一个分支上的提交重新应用到另一个分支上。这通常意味着将一系列提交移动到另一个分支的顶部。

命令格式:

git rebase <branch-name>

示例: 继续上面的例子,如果你想将master分支的更改重新应用到develop分支的顶部,可以执行:

git checkout master
git rebase develop

在这里插入图片描述

特点:

  • 历史重写: git rebase 会改变提交历史,可能会导致提交ID的变化。
  • 交互式 rebase: 可以使用 git rebase -i 进行交互式 rebase,允许你修改、删除或重组提交。
  • 避免合并提交: 使用rebase可以避免产生额外的合并提交。

Git Cherry-Pick

git cherry-pick 允许你选择性地将单个或多个提交从一个分支应用到另一个分支。这对于修复已发布的版本特别有用。

cherry-pick单个提交命令格式:

git cherry-pick <commit-4>

示例: 如果想将develop分支中的某个提交(例如 commit hash 为<commit-4>)应用到master分支,可以执行:

git checkout master
git cherry-pick <commit-4>

在这里插入图片描述

cherry-pick多个提交命令格式:

git cherry-pick <commit-4>空格<commit-8>
git cherry-pick <commit-4>..<commit-8>
git cherry-pick <commit-4>^..<commit-8>

示例: 如果想将develop分支中的某几个提交(例如 commit hash 为<commit-4><commit-8>)应用到master分支,可以执行:

git checkout master
git cherry-pick <commit-4>空格<commit-8>

在这里插入图片描述

cherry-pick多个提交命令格式:

git cherry-pick <commit-4>空格<commit-8>
git cherry-pick <commit-4>..<commit-8>(4,8]
git cherry-pick <commit-4>^..<commit-8>[4,8]

示例: 如果想将develop分支中的某连续几个提交(例如 commit hash 为 (<commit-4><commit-8>)应用到master分支,可以执行:

git checkout master
git cherry-pick <commit-4>空格<commit-8>(4,8]
git cherry-pick <commit-4>^..<commit-8>[4,8]

在这里插入图片描述

注意事项:

  • 冲突处理:如果在cherry-pick过程中遇到文件修改冲突,你需要手动解决这些冲突,然后使用git add添加解决后的文件,并使用git cherry-pick --continue继续,如果你决定不再继续cherry-pick过程,可以使用git cherry-pick --abort来取消。
  • 历史重写:虽然cherry-pick本身不重写历史,但如果你对一个已经被推送的分支使用cherry-pick,可能会导致其他人需要重新拉取最新的提交。
  • 提交信息cherry-pick会保留原始提交的信息,包括提交者和提交消息。

总结

  • Merge: 适用于希望保留分支历史的场景,通常用于最终合并功能分支到主分支。
  • Rebase: 适用于希望保持线性历史记录的情况,适合于经常需要同步最新变更的开发人员。
  • Cherry-Pick: 适用于需要快速应用特定修复或功能到现有分支的情况。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Postman Flows打造你的专属API:外部公开,轻松上手!

引言 Postman Flows 是一个使用 GUI 进行无代码 API 调用流程创建的服务。这篇文章我尝试使用 Flows 来构建将 Momento Topic 中的数据保存到 TiDB 的保存 API&#xff0c;因此想分享一些使用过程中的技巧等。 实现内容 将从 Momento Topics 配发的 JSON 数据保存到 TiDB 中。…

算法-BFS搜索

题目一 解题思路 比较标准的暴力搜索空间换时间的策略 二维数组map表示具体地图&#xff0c;far表示遍历过程中某点到起点的距离。 队列 q 表示在遍历过程中当前距离的所以节点坐标。 每次的节点寻找其上下左右四个方向可以继续前进的点&#xff08;这里在过程中会发生两个…

Java之多线程-同步代码块

线程同步 Java中提供了线程同步的机制&#xff0c;来解决上述的线程安全问题。 Java中实现线程同步&#xff0c;主要借助synchronized关键字实现。 线程同步方式&#xff1a; 同步代码块 同步方法 锁机制 1&#xff09;同步代码块 格式&#xff1a; //Object类及其子类…

Web网页端IM产品RainbowChat-Web的v7.1版已发布

一、关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统&#xff0c;是RainbowChat的姊妹系统&#xff08;RainbowChat是一套基于开源IM聊天框架 MobileIMSDK (Github地址) 的产品级移动端IM系统&#xff09;。 ► 详细介绍&#xff1a;http://www.52im.net/thread-2…

研发(RD)注意事项 / 复杂项目规划、控制方法 PERT 和 CPM

注&#xff1a;机翻&#xff0c;未校对&#xff0c;去掉了原文中广告。 What Is Research and Development (R&D)? 什么是研发&#xff08;R&D&#xff09;&#xff1f; Investopedia / Ellen Lindner Research and Development An ongoing effort to develop or impr…

Spring Boot入门指南:留言板

一.留言板 1.输⼊留⾔信息,点击提交.后端把数据存储起来. 2.⻚⾯展⽰输⼊的表⽩墙的信息 规范&#xff1a; 1.写一个类MessageInfo对象&#xff0c;添加构造方法 虽然有快捷键&#xff0c;但是还是不够偷懒 项目添加Lombok。 Lombok是⼀个Java⼯具库&#xff0c;通过添加注…

Java | Leetcode Java题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution {public void moveZeroes(int[] nums) {int n nums.length, left 0, right 0;while (right < n) {if (nums[right] ! 0) {swap(nums, left, right);left;}right;}}public void swap(int[] nums, int left, int right)…

AI/机器学习(计算机视觉/NLP)方向面试复习3

1. Pooling 有哪些方式&#xff1f;pytorch的实现&#xff1f; Pooling可以分成&#xff1a;最大池化&#xff0c;平均池化&#xff0c;全局平均池化&#xff0c;随机池化&#xff0c;空间金字塔池化。 1. 最大池化&#xff08;Max Pooling&#xff09; 最大池化是最常用的池…

将Android Library项目发布到JitPack仓库

将项目代码导入Github 1.将本地项目目录初始化为 Git 仓库。 默认情况下&#xff0c;初始分支称为 main; 如果使用 Git 2.28.0 或更高版本&#xff0c;则可以使用 -b 设置默认分支的名称。 git init -b main 如果使用 Git 2.27.1 或更低版本&#xff0c;则可以使用 git symbo…

【Django】前端技术-网页样式表CSS

文章目录 一、申明规则CSS的导入方式行内样式内部样式外部样式 二、CSS的选择器1. 基本选择器标签选择器&#xff1a; 选择一类标签 标签{}类选择器 class&#xff1a; 选择所有class属性一致的表情&#xff0c;跨标签.类名{}ID选择器&#xff1a;全局唯一 #id名{} 2.层次选择器…

Element快速学习

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;JavaWeb关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 什么是Element&#xff1f; Element&#xff1a;它是由饿了么团队开发的一个…

cpp程序设计实践,类实现树链刨分以及计算几何类

程序设计要求 是某个cq高校期末程序设计实践作业&#xff0c;全部自己做的比较小众分值90。  试建立一个继承结构&#xff0c;以栈、队列为派生类&#xff0c;建立它们的抽象基类-Bag类&#xff0c;写出各个类的声明及定义&#xff0c;并实现如下功能&#xff1a;  统一命名…

华为高品质万兆园区体验保障技术白皮书

华为高品质万兆园区体验保障技术白皮书 - 华为企业业务 re 音视频会议已经成为企业办公的核心应用系统&#xff0c;尤其是高层会议的质量对企业的运营效率有很大影响&#xff0c;相 关的体验问题也是员工投诉的重灾区。但不同于传统的网络通断类问题,体验类问题涉及的范围大、…

高通QCC3081蓝牙芯片双CVC参数配置与优化指南

高通的QCC3081芯片搭载了领先的高通1-MIC、2-MIC、3-MIC CVC回声消除和噪声抑制技术&#xff0c;无论您身处何地&#xff0c;都能通过蓝牙立体声耳机或耳塞享受清晰的语音通话体验。无论是家中的生活噪音、街道的车流声还是人群的喧哗&#xff0c;这些背景噪声都不再是通话质量…

MATLAB基础:函数与函数控制语句

今天我们继续学习Matlab中函数相关知识。 API的查询和调用 help 命令是最基本的查询方法&#xff0c;可查询所有目录、指定目录、命令、函数。 我们直接点击帮助菜单即可查询所需的API函数。 lookfor 关键字用于搜索相关的命令和函数。 如&#xff0c;我们输入lookfor inpu…

vue-plugin-hiprint 打印 预览打印+静默打印

1.安装 npm install vue-plugin-hiprint npm i socket.io-client --save //为了静默打印 &#xff08;为此还需安装客户端&#xff09; 2…html页面 引入css <link rel"stylesheet" type"text/css" media"print" href"https://cdn.jsde…

MySQL高性能读写分离实战

介绍 我的上一篇文章实现了mysql的主从复制结构&#xff0c;今天这篇继续将如何实现读写分离。 读写分离是指&#xff1a;针对数据库的写操作&#xff08;插入、更新、删除等&#xff09;访问主数据库&#xff0c;读操作访问从数据库。 因为一般网站的读请求的数量是远远大于…

photoshop学习笔记——选区3 选区的变化

选区制作完成之后可以对选区进行变化 主要有&#xff1a; 反选&#xff1a;shift ctrl I 变换 修改&#xff1a; 边界 设置选区的边界大小 类似 CSS中的borderSize平滑 对选区的角进行平滑扩展 向外扩展选区收缩 向内收缩选区羽化 让边界变得过渡透明度 设置…

大数据学习之sparkstreaming

SparkStreaming idea中初步实现 Spark core: SparkContext 核心数据结构&#xff1a;RDD Spark sql: SparkSession 核心数据结构&#xff1a;DataFrame Spark streaming: StreamingContext 核心数据结构&#xff1a;DStream(底层封装了RDD)&#xff0c;遍历出其中的RDD即可进行…