type
status
date
slug
summary
tags
category
icon
password
一、Cherry-Pick 的核心概念与使用场景
1. 什么是 Cherry-Pick?
git cherry-pick
是 Git 中一项选择性合并提交的功能,允许开发者将特定提交从一个分支复制到另一个分支,而无需合并整个分支的历史记录。其核心特点包括:- 精准移植代码:例如将修复 Bug 的提交单独应用到生产环境(如
master
)或预发布分支(如release
)
- 生成新提交:原提交的哈希值会改变,但代码内容保持一致
- 支持多提交操作:可一次性选择单个或多个提交(如
git cherry-pick A..B
或A^..B
),需注意提交顺序
- 冲突需手动解决:若目标分支存在冲突,需手动编辑后继续操作
2. Cherry-Pick 的典型场景
- 紧急修复:将
hotfix
分支的修复提交快速移植到release
分支。
- 多分支协作:在并行开发中,将某个功能的提交跨分支共享。
- 代码回溯:恢复误删的功能提交到其他分支。
二、Merge 代码到 Master 或 Release 的策略
1. 合并到 Master(生产环境)
- 直接合并:适用于稳定功能的整体合并(如
git merge feature
),但需通过完整测试
- Cherry-Pick(推荐):仅挑选已验证的提交,避免污染生产环境代码。例如将
feature
分支的commitB
单独应用到master
:
Bash
git checkout master git cherry-pick commitB
2. 合并到 Release(预发布环境)
- 传统流程:从
dev
分支合并到release
,适用于全量测试:
Bash
git checkout release git merge dev
- 敏捷流程:通过 Cherry-Pick 将特定功能提交从
feature
分支直接应用到release
,适合多版本并行开发
三、互联网公司的完整代码合并流程
1. 分支策略与开发规范
互联网公司通常采用以下分支模型之一:
- Git Flow:包含
master
(生产)、develop
(开发)、feature
(功能)、release
(预发布)、hotfix
(紧急修复)分支,适合多版本维护
- GitHub Flow:仅保留
master
分支,所有功能通过 Pull Request(PR)合并,适合持续交付
- GitLab Flow:结合环境分支(如
staging
、production
),强调 CI/CD 集成
2. 典型开发与合并流程
- 需求开发阶段:
- 从
master
或develop
拉取feature
分支进行开发。 - 提交代码至远程仓库,触发自动化构建与单元测试
- 联调与测试阶段:
- 将
feature
分支合并到dev
分支进行集成测试。 - 测试通过后,通过 Cherry-Pick 或 Merge 将代码同步到
release
分支进行预发布验证
- 发布与生产阶段:
release
分支通过验收后,合并到master
分支并打 Tag 标记版本。- 若线上出现 Bug,从
master
拉取hotfix
分支修复,验证后合并回master
和develop
58。
3. 代码审查与冲突解决
- PR/MR 机制:通过 GitLab 或 GitHub 的 Merge Request 流程,要求至少两人审查代码
- 冲突处理:若合并时出现冲突,需在本地解决后重新提交或使用
git cherry-pick --continue
继续操作
四、流程对比与最佳实践
1. 合并工具对比
操作 | Cherry-Pick | Merge |
适用场景 | 选择性移植提交(如紧急修复) | 整体合并分支(如功能全量发布) |
提交历史 | 生成新提交,原记录保留 | 保留原提交,生成合并节点 |
冲突频率 | 较高(需手动处理依赖) | 中等(需解决整体差异) |
2. 最佳实践
- 分支规范:明确分支生命周期(如
release
分支在发布后删除)
- 代码审查:强制要求 PR 审查,结合自动化工具(如 SonarQube)检查代码质量
- 版本标记:使用语义化版本号(如
v1.2.3
)并关联 Tag,便于回滚与追踪
- 自动化流水线:集成 CI/CD 工具(如 Jenkins、GitLab CI),实现自动构建、测试与部署
五、注意事项
- 避免滥用 Cherry-Pick:频繁使用会导致提交历史碎片化,建议仅在必要时使用
- 测试优先:合并到
master
或release
前必须通过自动化测试与人工验收
- 记录来源信息:使用
git cherry-pick -x
在提交信息中记录原提交哈希,便于追溯
- 团队协作规范:统一分支命名(如
feature/20240314-payment
)与合并流程,减少沟通成本
六、总结
- Cherry-Pick 是精准工具:适合紧急修复或选择性移植代码,但需谨慎处理依赖关系。
- Merge 是全局操作:适合功能全量发布或长期协作开发。
- 流程需适配团队:根据项目规模(单体 vs 微服务)和发布节奏(瀑布 vs 敏捷)选择 Git Flow 或 GitHub Flow 等策略。
这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(
git merge
)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。

git branch -r
git checkout -b 本地分支名 origin/远程分支名
solve merge into problem in case of any conflict
# 1. 创建临时备份分支 git branch backup-feature-20250313
# 2. 合并 master 到当前开发分支 git merge master
# 3. 若合并后发现问题,切换回备份分支 git checkout backup-feature-20250313
# 4. 强制覆盖原开发分支(可选) git branch -f feature-branch
git branch -d backup-feature-20250313