Skip to content
← 返回Git列表
Git完整实践与解答

Git Cherry-pick 指定提交同步指南 ​

适用场景 ​

当某些提交已经合入 dev,但暂时不能整体合并 dev 到 test 时,可以使用 cherry-pick 将指定提交同步到基于 test 创建的新业务分支。

本指南以将 dev 上两个提交同步到 test 新分支为例:

  • d9b91c6c6bc77bcbe44291b9e158568f1503f0c7
  • 1b39242ede61a822d89e0ece4a9b26f45eeecce4

处理原则 ​

  1. 不改动 dev 原提交。
  2. 不直接在 test 上提交。
  3. 基于 test 新建业务分支。
  4. 使用 cherry-pick 精准同步指定提交。
  5. 操作前后检查分支、提交链、工作区状态。
  6. 最后运行现有测试,或说明无法通过的原因。

Cherry-pick 流程图 ​

查看图表代码

操作步骤 ​

1. 确认当前状态 ​

bash
git status --short --branch

确认工作区干净,避免切分支或 cherry-pick 时带入未提交改动。

2. 确认提交存在 ​

bash
git show --stat --oneline d9b91c6c6bc77bcbe44291b9e158568f1503f0c7
git show --stat --oneline 1b39242ede61a822d89e0ece4a9b26f45eeecce4

如果提交不存在,需要先确认本地仓库是否已经拉取最新远端分支。

3. 确认目标分支不存在 ​

bash
git branch --list fix_player_conf

如果没有输出,说明本地还没有这个分支,可以继续创建。
如果分支已经存在,不要直接覆盖,应先确认这个分支是否已有其他用途。

4. 确认 test 是否已经包含提交 ​

bash
git branch --all --contains d9b91c6c6bc77bcbe44291b9e158568f1503f0c7
git branch --all --contains 1b39242ede61a822d89e0ece4a9b26f45eeecce4

如果 test 不在结果中,说明仍需要同步这些提交。

5. 基于 test 创建新分支 ​

bash
git checkout test
git checkout -b fix_player_conf

这样可以保证后续提交都落在业务分支上,不污染 test。

6. 按顺序 cherry-pick 指定提交 ​

bash
git cherry-pick d9b91c6c6bc77bcbe44291b9e158568f1503f0c7
git cherry-pick 1b39242ede61a822d89e0ece4a9b26f45eeecce4

如果两个提交存在依赖关系,必须按原提交顺序执行,否则可能出现冲突或行为不一致。

7. 校验同步结果 ​

bash
git status --short --branch
git log --oneline --decorate -4
git diff --stat test..fix_player_conf

预期结果:

  • 当前分支是 fix_player_conf。
  • 工作区干净。
  • fix_player_conf 比 test 多出两个提交。
  • 变更文件符合本次同步范围。

8. 运行测试 ​

bash
go test ./...

如果测试失败,需要区分失败原因:

  • 是否由本次 cherry-pick 引入。
  • 是否是仓库原有测试问题。
  • 是否缺少本地配置、Redis、测试文件等环境依赖。

本次实际结果 ​

本次基于 test 创建了新分支:

bash
fix_player_conf

同步后生成的新提交为:

bash
156f7917 低余额改配置
e244705d 兼容锦标赛

原 dev 上的提交未被修改。

本次验证结果 ​

执行测试命令:

bash
go test ./...

测试未通过,失败点主要来自仓库已有测试或本地环境问题,例如:

  • 测试依赖的配置文件不存在。
  • Redis 未初始化。
  • 测试文件缺少 import。
  • 测试引用了不存在的方法。
  • 部分测试存在空指针 panic。

这类失败需要单独处理,不能直接认定是本次 cherry-pick 引入。

冲突处理 ​

如果 cherry-pick 出现冲突,先查看冲突文件:

bash
git status

解决冲突后继续:

bash
git add <冲突文件>
git cherry-pick --continue

如果确认不继续本次同步:

bash
git cherry-pick --abort

常见风险 ​

风险说明建议
顺序错误第二个提交依赖第一个提交时,顺序反了可能冲突或行为异常按原提交顺序执行
目标分支已存在已有 fix_player_conf 可能包含其他人的工作先确认分支用途
工作区不干净未提交改动可能影响切分支或同步结果操作前检查 git status
测试失败误判测试失败不一定由本次同步导致结合失败文件和变更文件判断

推荐最终检查命令 ​

bash
git status --short --branch
git log --oneline --decorate -5
git diff --stat test..fix_player_conf

继续阅读