前言

项目开发中,往往会有多个分支出现,如测试环境 ,生产环境分支,此时大家都将代码发送到了测试环境,但是上线生产时 只有个别功能需要本期上线,此时就需要将相应本次上线功能的commit 提交到生产分支中。


一、git cherry-pick 命令作用?

git cherry-pick 是 Git 中用于选择性地将单个或多个提交(commit)应用到当前分支的命令。它的核心作用是 “挑选” 其他分支上的特定提交,将其复制并应用到当前工作分支,而无需合并整个分支的所有提交。

1.1 、核心用途

提取单个提交到目标分支

例如:开发分支(dev)上有一个修复 bug 的提交(commit-A),需要将该修复同步到主分支(main),但不想合并 dev 上的其他未完成提交,此时可用 cherry-pick 提取 commit-A 到 main。
复用独立功能提交
当某个分支上的单个提交实现了独立功能 / 修复,需在其他分支复用该提交时,避免合并整个分支的冗余代码。
修复多分支的相同问题

若多个分支(如 main、v2.0)存在相同 bug,可在一个分支上修复后,通过 cherry-pick 将修复提交应用到其他分支。

1.2 、基本用法

  1. 挑选单个提交
git cherry-pick <commit-hash>
  • " commit-hash:目标提交的哈希值(可通过 git log 查看)。
    示例:将 dev 分支的 a1b2c3d 提交应用到当前分支:

    git checkout main          # 切换到目标分支
    git cherry-pick a1b2c3d    # 挑选提交
  1. 挑选多个提交

# 方式1:逐个指定提交
git cherry-pick <commit1> <commit2>

# 方式2:挑选连续范围(左开右闭,commitA 到 commitB 含 commitB)
git cherry-pick <commitA>..<commitB>

# 方式3:挑选连续范围(包含 commitA 和 commitB)
git cherry-pick <commitA>^..<commitB>
  1. 冲突处理
    若 cherry-pick 过程中出现冲突(如代码重叠),Git 会暂停操作并提示冲突文件:
    手动解决冲突后,执行:

git add <冲突文件>
git cherry-pick --continue  # 继续应用提交

若放弃本次 cherry-pick:


git cherry-pick --abort

若保留当前修改并退出 cherry-pick:


    git cherry-pick --quit

1.3 关键特性

生成新提交cherry-pick 并非移动原提交,而是基于原提交的内容创建新的提交(哈希值不同),原分支的提交保持不变。保留提交信息新提交会继承原提交的作者、提交信息(如 commit message),仅提交哈希值和时间戳更新。

适用场景限制
- 适合独立、无依赖的提交(如单个 bug 修复、小功能);
- 若提交依赖其他前置提交(如修改了同一文件的不同部分),直接 cherry-pick 可能导致冲突或逻辑错误,此时建议用 merge 或 rebase。

1.4 、与其他命令的区别

命令 作用 适用场景

  • git cherry-pick 挑选单个 / 多个提交到当前分支 适用于复用独立提交、跨分支修复
  • git merge 合并整个分支的所有提交到当前分支 适用于分支功能完成后的整体合并
  • git rebase 将当前分支的提交 “移植” 到目标分支顶端 适用于线性化提交历史、清理分支

1.5、注意事项

git cherry-pick 是 Git 中 “精准复用提交” 的工具,核心价值在于跨分支选择性应用提交,尤其适用于修复多分支 bug、复用独立功能提交的场景。使用时需注意提交的独立性,避免因依赖导致冲突或逻辑问题

  • 提交独立性:确保挑选的提交不依赖其他未被挑选的提交,否则可能引发代码错误。
  • 冲突风险:若目标分支与原提交的代码上下文差异较大,冲突概率较高,需谨慎操作。
  • 标签与注释:cherry-pick 不会自动复制原提交的标签(tag),需手动重新打标签。

二、cherry-pick使用:

将分支A 中所作的修改 pick 到分支B 中

2.1 checkout B 分支:

检出B 分支,进行pull 获取最新的代码

在这里插入图片描述

rebase 更新:
在这里插入图片描述

2.2 筛选要合并的commit

通过git 提交的日志记录,筛选出需要被 pick 的commit

2.2.1 使用git 本身进行pick 提交:

在这里插入图片描述

选择原有的分支A:
在这里插入图片描述User 选择 me
在这里插入图片描述

可以看到改分支下的所有提交记录:
在这里插入图片描述

依次查看文件:

左侧可以选择对应的提交,右侧可以查看对应的提交文件,双击文件可以查看内容

在这里插入图片描述

2.3 选择对应commit 提交:

筛选出本次想要的commit 提交,Ctrl 可以选择多个

在这里插入图片描述

右键选择 Cherry-pick
在这里插入图片描述
显示pick 结果
在这里插入图片描述
git hub desk 可以查看本次要提交的内容:

在这里插入图片描述
确认没有问题进行提交:
在这里插入图片描述

2.2.2 使用git hub desk进行 pick 提交:

先checkout 目标分支B ,同样的先pull 拉取最新的代码 ,然后使用git hub desk 进行pick

选择要合并的commit:
在这里插入图片描述

选择要合并到的目标分支:
在这里插入图片描述

在这里插入图片描述

2.2.3 冲突处理:

在合并的过程中可能出现 文件冲突,此时需要根据提示找到对应的冲突文件,手动处理

如下面的冲突提示:
在这里插入图片描述

冲突代码:
在这里插入图片描述
解决冲突后,继续提交:

在这里插入图片描述

最后将本地的代码进行推送:
在这里插入图片描述


总结

本文对git分支代码pick 提交 处理进行记录。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐