Git 代码合并最佳实践:如何合理选择 Merge 或 Cherry-Pick?含常见问题解答

Git 的cherry-pick含义 git cherry-pick是一个Git命令,它允许你选择一个或多个其他分支上的提交(commits),并将它们复制到你当前的工作分支。 阅读详情
AI摘要

本文详细介绍了Git中合并整个分支和精选特定提交两种合并方式。阐述了它们的概述、使用场景、优缺点及示例,对比了二者差异,并给出选择建议。合并整个分支适用于完整合并及保留历史,精选特定提交适用于选择性同步,还解答了常见问题。

在 Git 中,merge(合并)和 cherry-pick(精选)是两种不同的合并方式,它们适用于不同的场景。下面我们详细对比 git merge 和 git cherry-pick,并讨论如何在不同情况下做出选择。


1. git merge(合并整个分支)

概述

git merge 用于合并整个分支的历史记录和更改,并在目标分支上创建一个新的合并提交。

使用场景

  • 需要完整地合并一个分支的所有更改(包括多个提交)。
  • 需要保留完整的历史记录,包括所有提交信息。
  • 适用于开发完成后的功能分支合并,例如将 feature_branch 合并到 main。

优点

✅ 保留完整的提交历史(不会丢失上下文)。
✅ 适用于大规模合并,特别是功能开发完成后的合并。
✅ 能自动合并(如果没有冲突)。

缺点

❌ 可能会引入不需要的提交(如果 feature_branch 里有未完成或不稳定的代码)。
❌ 可能会导致冲突,尤其是两个分支长期未同步的情况下。
❌ 分支历史可能变得复杂,如果团队喜欢保持干净的 main 分支,可能会考虑其他方式。

示例

# 切换到目标分支(如 main) git checkout main

# 合并 SE16 分支到 main git merge SE16


2. git cherry-pick(精选特定提交)

概述

git cherry-pick 用于从一个分支中选择性地复制一个或多个提交到另一个分支,而不会合并整个分支的历史。

使用场景

  • 只想要某些特定的提交,而不是整个分支的所有提交。
  • Bug 修复回溯:某个修复提交存在于 SE16,但 SE15 也需要这个修复,而不需要其他 SE16 的新特性。
  • 避免引入不相关的更改,只获取你需要的代码修改。
  • 紧急补丁:只挑选某个分支上的一个修复提交到生产环境分支。

优点

✅ 避免合并整个分支的历史,只获取需要的更改。
✅ 适用于补丁或小规模代码迁移,不会引入额外的提交。
✅ 能保持目标分支的清晰历史,不会污染 main 分支的记录。

缺点

❌ 可能会导致提交历史混乱(重复的提交)。
❌ 如果 cherry-pick 的提交有依赖关系(如依赖前面的提交),可能会导致缺少上下文,从而出错。
❌ 需要手动解决冲突,如果多个 cherry-pick 的提交依赖于彼此,可能会变得麻烦。

示例

# 切换到目标分支(如 SE15) git checkout SE15

# 选择 SE16 分支上的某个提交(如 a1b2c3d) git cherry-pick a1b2c3d

如果要 cherry-pick 多个提交:git cherry-pick a1b2c3d e4f5g6h

如果要 cherry-pick 一系列提交:git cherry-pick a1b2c3d^..e4f5g6h (选取 a1b2c3d 之后到 e4f5g6h 的所有提交)


3. git merge vs git cherry-pick 对比

对比项git merge(合并)git cherry-pick(精选)
作用合并整个分支的所有提交只复制选定的提交
历史记录保留完整的提交历史可能导致重复的提交
适用场景需要完整合并功能或开发分支只想要部分更改或修复
影响范围可能会引入未完成或不需要的代码只影响选定的提交
冲突可能性可能较多,特别是长期未同步的分支可能有冲突,特别是多个提交依赖时
典型应用合并功能开发、发布新版本选择性合并 bug 修复或小特性

4. 该如何选择?

使用 merge(合并整个分支)的情况

✅ 你希望完整合并 SE16 的所有修改到 SE15。
✅ 你希望保留完整的开发历史,不会遗漏任何改动。
✅ 你的团队使用Git Flow 或 Feature Branch 工作流,合并后功能分支会被删除。
✅ 你希望减少 cherry-pick 可能带来的重复提交问题。

👉 适用于:

  • feature_branch 开发完成后合并到 main。
  • SE16 的所有功能都需要进入 SE15。
  • 代码库历史记录需要完整保留。

使用 cherry-pick(精选特定提交)的情况

✅ 你不想合并整个分支,只需要某些特定提交。
✅ 你需要回溯 bug 修复,例如 SE16 中的修复需要同步到 SE15,但不需要 SE16 的其他新特性。
✅ 你想要在不同版本之间迁移某个功能,但不想合并整个分支的历史。
✅ 你在生产环境(main 或 release 分支)上只想应用某个紧急修复,而不引入其他未测试的代码。

👉 适用于:

  • 只想获取 SE16 中的某个 bug 修复到 SE15。
  • 生产环境需要紧急修复,不想引入其他未完成的更改。
  • 只想迁移某个特性,而不迁移整个分支的代码。

5. 总结

✅ 用 merge 如果你想要完整合并 SE16 的所有修改。
✅ 用 cherry-pick 如果你只想复制 SE16 中的某些特定提交。

如果你的 SE16 分支包含多个新功能,但你只想要一个 bug 修复同步到 SE15,用 git cherry-pick。
如果 SE16 已经稳定,且所有修改都需要合并到 SE15,用 git merge。

在团队开发中,merge 适用于大部分情况,但在需要选择性同步特定提交时,cherry-pick 是更好的选择。🚀

6. 常见问题解答

  • 通常 git cherry-pick <commit> 只适用于 本地已知的提交。但如果 d2b8b5dd663b3 是 远程 se15 分支 的提交,而你的本地还没有拉取 se15 分支,Git 默认是找不到它的。

    为了避免切换分支,可以显式告诉 Git 去远程 origin/se15 找这个提交: 

    git cherry-pick origin/se15 d2b8b5dd663b3

    这可以让 Git 在远程分支中查找并 cherry-pick 该提交到 当前分支,而不需要切换到 se15。

Git Cherry-pick:核心命令、实践详解 在多分支协作开发中,我们常常只想把某个分支上的单个或若干次提交,合并到另一个分支,而不需要合并整个分支。Git 提供的 cherry-pick 命令,正是为此而生的利器。 掌握 cherry-pick 如同获得代码移植手术刀,合理使用能让你的版本控制更加优雅高效! 阅读详情

相关推荐

Git 分支整合策略:Cherry-pick、Merge、Rebase 三者之间对比

Merge Rebase都是将分支的改动带到另一分支的方法,区别在于“迁移范围”、“历史显示方式”以及“对后续工作的影响”。选择策略主要看目标:若你只想复制几个提交且不干扰其他内容,是好帮手;若要合并完整分支并保留多人协作痕迹,Merge更简单可靠;若追求最简洁线性历史或需要交互式编辑提交,Rebase是首选,但需关注团队协作中的冲突与历史重写问题。团队协作开发要形成统一规范哪些分支只能使用 merge;哪些分支可以 rebase;何时可以 cherry-pick;

guoqkmiss的博客 1622

git cherry-pick命令用法详解

git cherry-pick命令用法详解

IT之一小佬的博客 5万+

团队协作效率翻倍:用PyCharm Professional版玩转GitLab的代码审查与分支管理

本文详细介绍了如何利用PyCharm Professional版与GitLab的深度集成,提升团队协作效率。从智能分支管理、可视化代码审查到CI/CD流程集成,全面解析了现代化开发团队所需的高级Git操作和最佳实践,帮助Python开发者实现无缝协作与高效代码管理。

dianan0938的博客 345

git merge rebase cherry-pick分别什么时候用?一文解惑

一、git merge 1.使用 将分支切换到 master 上去:git checkout master 将分支 feature 合并到当前分支(即 master 分支)上:git merge feature 2.特点 只处理一次冲突 引入了一次合并的历史记录,合并后的所有 commit 会按照提交时间从旧到新排列 所有的过程信息更多,可能会提高之后查找问题的难度 二、git rebase 1.使用 与 git merge 一致,git rebase 的目的也是将一个分支的更改并入到另外

weixin_64314555的博客 8181

LIN总线CAPL函数实战——动态控制报文发送(linDeactivateSlot与linActivateSlot)

本文深入解析了LIN总线测试中动态控制报文发送的核心CAPL函数linDeactivateSlot与linActivateSlot的实战应用。通过详细拆解函数参数、生效范围及限制,并结合故障注入、功耗测试等实际场景的代码示例,指导测试工程师在仿真LIN主节点时,灵活调度报文发送,实现高效自动化测试。

weixin_29255731的博客 349

ovs实现lb负载均衡

负载均衡器的实现原理是通过硬件或软件设备将客户端访问流量根据转发策略分发到多个服务器或设备上,以确保系统的负载均衡。二层负载均衡‌:使用虚拟MAC地址方式,根据OSI模型的二层进行负载均衡。‌四层负载均衡‌:基于IP+端口的负载均衡,主要分析IP层及TCP/UDP层,实现四层负载均衡。‌七层负载均衡‌:从应用层开始,根据虚拟的URL或IP、主机名接收请求,再转向相应的处理服务器。

bobi的博客 954

repo-automation-bots终极指南:Google开源的GitHub自动化机器人集合

在开源项目的日常维护中,自动化是提高效率的关键。今天我们要介绍的是Google开源的一个强大工具集合——**repo-automation-bots**,这是一套基于Probot构建的GitHub自动化机器人,专门用于执行跨开源仓库的常见维护任务。无论你是个人开发者还是团队负责人,这些机器人能显著减少重复性工作,让你专注于更有价值的编码工作。 ## 什么是repo-automation-bots

gitblog_00939的博客 747

深入解析Apollo Lattice Planner:自动驾驶轨迹规划的核心算法与实践

本文深入解析了百度Apollo自动驾驶平台中的核心轨迹规划算法——Lattice Planner。文章详细阐述了其作为车辆“即时决策者”的工作原理,通过“采样-评估”的六步流程(Frenet坐标转换、状态采样、轨迹生成、硬约束过滤、代价函数打分及决策平滑),在复杂路况下实时规划出安全、舒适、高效的行驶轨迹。该算法是自动驾驶实现智能决策与精准控制的关键技术。

weixin_29090677的博客 830

检索+重排双阶段架构:Qwen3-Embedding-0.6B搭配Qwen3-Reranker构建精准检索系统完全指南

Qwen3-Embedding-0.6B 是千问家族出品的轻量级文本嵌入模型(Text Embedding),与 Qwen3-Reranker 搭配即可搭建"向量检索 + 重排"的双阶段精准检索系统:前者用向量快速召回候选,后者对候选精排,兼顾速度与准确率。本文面向新手,用最少代码讲清楚这套架构的原理、部署步骤和调优技巧 🎯 ## 一、为什么要"检索+重排"?双阶段架构原理 单一向量检索存在

gitblog_00006的博客 1051

TOEIC托业词汇汇总(完整版)

1.appointment 约会,约定2.attendance 出席人数;出席3.cabinet 橱柜4.calendar 日历;月历;行事历5.clerk 办事员,书记6.directory 人名住址薄7.duplicte 复制;副本8.filing 归档9.in-tray 待处理文件盒10.monitor 检测;监视;追踪11.out-tray 已处理文件盒12.partition 分隔;分隔物(如墙壁等)13.postage 邮费。

weixin_39676449的博客 1万+

Zynq7000混合启动方案:QSPI Flash引导与eMMC ext4文件系统部署实战

本文详细介绍了Zynq7000平台的混合启动方案,结合QSPI Flash引导与eMMC ext4文件系统部署,解决嵌入式Linux系统启动可靠性与大容量存储需求。通过硬件连接配置、分区规划、Petalinux工程配置及实战部署步骤,帮助开发者高效实现系统优化,提升启动速度和文件系统性能。

weixin_29190169的博客 447

repo-automation-bots配置实战:如何为你的开源项目设置自动化标签和PR管理

想要让你的开源项目管理更高效吗?repo-automation-bots 是一个基于 Probot 的自动化机器人集合,专为 GitHub 仓库设计,能够自动执行常见的维护任务。本文将为你详细介绍如何配置和使用这个强大的自动化工具,让你的开源项目实现智能化的标签管理和 PR 分配。 ## 什么是 repo-automation-bots? repo-automation-bots 是由 Goo

gitblog_01163的博客 665

【数字人实战】Windows系统下Fun-CosyVoice3-0.5B-2512本地部署的避坑指南与疑难解析

本文详细介绍了在Windows系统下本地部署Fun-CosyVoice3-0.5B-2512的避坑指南与疑难解析,包括Python环境准备、源码获取、依赖安装、模型下载与WebUI启动等关键步骤。特别针对Windows环境下的常见问题提供了实用解决方案,帮助开发者高效完成部署并充分利用其语音转换与多语言支持功能。

weixin_42521856的博客 376

STM32第一个工程从零到点亮LED:环境搭建、寄存器与AI编程避坑指南

嵌入式开发与纯软件不同,代码只占一半,另一半在真实硬件上,因此理解芯片内部原理至关重要。STM32作为ARM Cortex-M内核的典型代表,其生态完善、调试成本低,学习价值极高。从GPIO控制LED这一基础实验切入,涉及时钟树配置、寄存器操作、CubeMX工具链搭建等核心环节,是建立硬件调试思维的第一步。在AI辅助编程日益普及的今天,掌握Keil MDK、ST-Link调试、HAL库调用等基本技能,才能真正判断AI生成代码的可靠性。通过串口打印、在线仿真等手段验证程序运行,并结合分层代码组织习惯,逐步进阶

weixin_33860528的博客 657

2024 大型集团人力资源数字化转型业务蓝图规划及实施路径规划方案【附全文阅读】

摘要:本方案针对大型企业人力资源数字化转型需求,重点解决组织协同弱、薪酬绩效管控难等痛点。通过构建"6项能力+8大流程+4大系统"框架,分三阶段(2024-2026年)实施7大项目,包括e-HR系统更换、员工服务平台搭建等核心场景。方案优先推进基础系统改造(2024年),再完善绩效管理和数据分析(2025年),最后落地人才发展等进阶模块(2026年),实现与OA、ERP系统的数据集成,全面提升HR运营效率和员工体验。文末提供的优先级清单明确了10个数字化场景的实施顺序及预期价值。

cdfunlove的博客 1346

基于SOLIDWORKS API的工业级插件开发指南

SOLIDWORKS API是基于COM技术的一套开发接口,支持C#、VB.NET等语言,用于自动化建模、属性管理、界面定制等功能。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 2750

Git Cherry Pick详解

Git是一款分布式版本控制系统,它提供了许多强大的功能来管理代码的版本和变更。其中之一就是命令,它允许我们选择某个分支上的一个或多个提交,并将它们应用到当前分支上。这个功能非常有用,可以帮助我们在不合并整个分支的情况下,将特定的提交应用到其他分支上。本篇博客将详细介绍命令的使用方法和示例。本篇博客详细介绍了命令的使用方法和示例。通过命令,我们可以选择性地将特定的提交应用到其他分支上,而不需要合并整个分支。这对于合并单个提交、修复bug和提取特定功能非常有用。

果酱 の 博客 6万+

假人有限元模型

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

git中merge,rebase,cherry-pick,patch的联系与区别

这些操作都是为了把一个分支上的工作加到另一个分支上。 merge 把另一个分支合并到当前分支上。 rebase 把当前分支的提交在另一分支上重演。(如果可以成功重演,本分支将会消失) cherry-pick 把本分支或者其他分支的某一次或某几次提交,在当前分支上重演。 patch 把一次或几次提交,做成补丁文件(可以远程发送给其他人)。这个补丁文件可以被应用到分支上。

frcoder的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

git中的cherry-pick和merge有些区别以及cherry-pick怎么用

可以看到,我们只将feature分支上的F这个commit应用到了dev分支,而不是合并整个feature分支。这就是cherry-pick的一个简单用法,它可以灵活地挑选修改并应用到当前分支。

ityqing的博客 6686

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

什么是cherry-pick

文章目录前言图示 前言 这里的cherry-pick指的是git的命令,cherry-pick 这个命令的作用就是把指定的commit,拉到一个新的分支上。 图示 比如此时分支情况如下: 这幅图中,每个圆圈代表一次commit 一条线是一个分支。 比如c2,c3,这是两次提交,在同一个分支上。 此时需求是:要把绿色分支的C3,蓝色分支的C5,紫色分支的C7合到一条新的分支上。 此时就需要cherry-pick命令了。 首先切到master分支,然后输入 git cherry-pick C3 C5 C7 此

自救 唯有自强 7万+

cherry-pick的定义和使用方法

cherry-pick的定义和使用方法

weixin_55229531的博客 6万+

【Git “cherry-pick“ 命令详解】

在 Git 中,是一个非常有用的命令,允许用户将其他分支上的单个提交应用到当前分支。这对于从某个分支中挑选特定的提交进行合并,或在不同分支之间传递修复和特性时尤其有用。与传统的合并操作不同,是一个精确的操作,可以确保只挑选特定的提交而不会影响整个分支。本文将详细介绍命令的作用、基本语法、常用选项、执行示例及一些进阶用法,帮助你更高效地使用这个命令进行代码管理。命令允许你从一个分支中选择一个或多个提交,并将这些提交应用到当前分支上。

涛ing的博客 1万+

Git常用命令cherry-pick

Git常用命令cherry-pick

YIYIYI 1万+

git cherry-pick 命令

连续提交(不包含A)

张紫娃的博客 5034

Git 的 Cherry-Pick

Git 的 Cherry-Pick

stephenbruce的博客 1万+

Git代码合并两大神器:Merge 对决 Cherry-pick,你真的用对了吗?

文章摘要:Git中的代码合并主要涉及git merge和git cherry-pick两种方式。前者用于合并整个分支,保留完整历史记录,适合功能开发完成后的合并;后者则可以精准选取单个提交,适合紧急修复或少量改动同步。两者各有优劣:merge保持历史完整性但可能混乱,cherry-pick灵活但可能丢失上下文或造成重复提交。选择原则是"功能用merge,修复用cherry-pick"。理解两者的区别和适用场景,能帮助开发者更高效地管理代码提交历史。

Apple_Boy的博客 1525
上一篇: 深入解析 Delegate 模式:提升代码解耦性的最佳实践
下一篇: windbg经典死锁排查(转)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ปรัชญา แค้วคำมูล

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值