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个提交,没有别人的!