1.git chery-pick
挑选单个或多个提交(commit),应用到当前分支。不像merge合并整个分支的提交,也不像rebase重写提交历史,而是复制提交修改。
应用场景
修复线上bug:从开发分支挑选特定bug修复提交,应用到生产分支;
补全功能:某个分支需要单个或多个提交,不合并整个分支;
纠正提交错误:比如提交错分支,将提交搬迁到正确的分支;
2.相关命令
基础语法
javascript
# 1. 挑选单个提交(最常用)
git cherry-pick <提交哈希>
# 2. 挑选多个连续提交(左闭右开,包含 A,不包含 B)
git cherry-pick <提交A哈希>..<提交B哈希>
# 3. 挑选多个连续提交(包含 A 和 B)
git cherry-pick <提交A哈希>^..<提交B哈希>
# 4. 挑选多个不连续提交
git cherry-pick <哈希1> <哈希2> <哈希3>
# 5. 常用选项
git cherry-pick -n <哈希> # 不自动创建提交(仅将修改应用到工作区,可手动调整后提交)
git cherry-pick -e <哈希> # 应用后编辑提交信息
git cherry-pick --abort # 冲突时放弃操作,恢复到操作前状态
git cherry-pick --continue # 解决冲突后继续操作
查看远程提交的哈希值
javascript
git log target<分支名>
使用cherry-pick转移提交
javascript
git cherry-pick <commitHASH>
3.应用场景
-
main:生产分支(需要修复 bug); -
dev:开发分支(已提交 bug 修复,哈希为a1b2c3d)。
需求:将 dev 分支的 a1b2c3d 提交(bug 修复),应用到 main 分支。
步骤 1:切换到目标分支(要应用提交的分支)
javascript
git checkout main # 或 git switch main(Git 2.23+)
步骤 2:执行 cherry-pick 挑选提交
先查看 dev 分支的提交历史,获取目标提交哈希(比如 a1b2c3d):
javascript
git log dev --oneline # 简洁显示提交历史,格式:哈希 提交信息
# 输出示例:a1b2c3d fix: 修复登录按钮点击无响应问题
挑选该提交
javascript
git cherry-pick a1b2c3d
步骤 3:处理冲突(如有)
冲突提示如下
javascript
Auto-merging src/components/Login.vue
CONFLICT (content): Merge conflict in src/components/Login.vue
error: could not apply a1b2c3d... fix: 修复登录按钮点击无响应问题
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
-
打开冲突文件(如
Login.vue),找到冲突标记(<<<<<<<=======>>>>>>>),手动编辑保留正确代码; -
标记冲突已解决:
git add src/components/Login.vue; -
继续 cherry-pick 流程:
git cherry-pick --continue; -
(可选)编辑提交信息,保存退出即可完成提交。
如果想放弃冲突处理:git cherry-pick --abort(恢复到操作前状态)