Git Cherry-Pick

Git Cherry-Pick 用法总结

🎯 是什么?

将一个或多个提交复制到当前分支,就像"摘樱桃"一样,只挑你想要的提交。


📝 基本用法

1. 复制单个提交

bash 复制代码
git cherry-pick <commit-hash>
# 例如:git cherry-pick 9772297

2. 复制多个提交

bash 复制代码
# 按顺序复制多个
git cherry-pick <hash1> <hash2> <hash3>

# 例如:git cherry-pick 9772297 9344469 eb2ddb0

3. 复制一段连续提交

bash 复制代码
# 从 A 到 B(不包括 A,包括 B)
git cherry-pick A..B

# 从 A 到 B(包括 A)
git cherry-pick A^..B

🔧 常用选项

选项 作用
-n--no-commit 只改工作区,不自动提交
-e--edit 复制前修改提交信息
-x 在提交信息中记录来源
--continue 解决冲突后继续
--abort 放弃本次 cherry-pick
--skip 跳过当前提交

🚨 解决冲突

bash 复制代码
# 出现冲突时
git status                    # 查看冲突文件
# 手动编辑文件解决冲突
git add <file>                # 标记已解决
git cherry-pick --continue    # 继续

# 或者放弃
git cherry-pick --abort

💡 实际场景

场景1:修复分支问题(你的情况)

bash 复制代码
# 基于 master 创建新分支
git checkout master
git checkout -b clean-branch

# 只复制自己的提交
git cherry-pick 9772297 9344469 eb2ddb0 6a99885

场景2:从其他分支借用某个功能

bash 复制代码
git checkout main
git cherry-pick abc1234   # 复制某个功能提交

场景3:恢复误删的提交

bash 复制代码
git reflog                # 找到丢失的提交
git cherry-pick def5678   # 复制回来

⚠️ 注意事项

注意点 说明
新提交哈希 cherry-pick 后会产生新的提交哈希(不是原来的)
冲突处理 必须手动解决冲突,不能跳过
不要乱用 在公共分支上小心使用,会改变历史
顺序重要 按时间顺序(从旧到新)复制

📋 完整示例

bash 复制代码
# 1. 查看提交历史
git log --oneline
# abc1234 fix: bug修复
# def5678 feat: 新功能
# ghi9012 docs: 更新文档

# 2. 切换到目标分支
git checkout master
git pull origin master

# 3. 创建新分支
git checkout -b my-clean-branch

# 4. 复制需要的提交(按时间顺序)
git cherry-pick ghi9012 def5678 abc1234

# 5. 如果有冲突
# 手动解决后
git add .
git cherry-pick --continue

# 6. 推送
git push origin my-clean-branch

🎯我的使用场景

bash 复制代码
# 你之前做的:
git checkout master                    # 切换到主分支
git checkout -b feat/take_photo_new    # 创建新分支
git cherry-pick 9772297                # 复制第1个提交
git cherry-pick 9344469                # 复制第2个提交
git cherry-pick eb2ddb0                # 复制第3个提交
git cherry-pick 6a99885                # 复制第4个提交
git push origin feat/take_photo_new    # 推送新分支

这样新分支就只有你自己的4个提交,没有别人的!

相关推荐
周小码1 天前
10分钟搭建私有Git服务器:Soft Serve实战
运维·服务器·git
梅塔文·欧帕西安卡琼1 天前
git的底层原理详解
git
待什么青丝1 天前
【git的摸鱼技巧】之工欲善其事
git·elasticsearch·搜索引擎
2601_961194021 天前
高中英语教资资料推荐|科三大题背诵和教学设计模板
git·开源·github·开源软件·开源协议·ossinsight
ting94520001 天前
InsForge Backend Branching 后端全链路 Git 式分支技术原理、架构实现与底层源码剖析
人工智能·git·elasticsearch·架构
程序猿阿伟1 天前
《扣子如何让OpenClaw技能开发提速》
人工智能·git·github
摇滚侠2 天前
IDEA 创建 Java 项目 推送到远程 Git 仓库
java·git·intellij-idea
稷下元歌2 天前
7天学会plc加机器视觉关于运动控制部份,配套视频在bib
开发语言·c++·git·vscode·python·docker·pip
tealcwu2 天前
【Git 实战】三类方案实现一键推送多端仓库(Gitee & GitHub)
git·gitee·github
摇滚侠2 天前
git ignore 忽略 .idea 目录 全新项目(尚未提交过 .idea).idea 已经被 Git 跟踪(已提交过)
java·git·intellij-idea