如何把提交从一个分支复制到另一个分支
复制提交到其他分支用 cherry-pick:切到目标分支后 git cherry-pick <提交哈希>;连续一段用 A^..B 范围;整个分支都复制用 merge 或 rebase。cherry-pick 产生新哈希,原分支不受影响。
用 git cherry-pick:切到目标分支,执行 git cherry-pick <提交哈希>,该提交的改动会以一个新提交落到当前分支。连续的一段用 git cherry-pick A^..B,不连续的列多个哈希。
基本流程
git checkout release-1.2 # 1. 切到目标分支
git log feature-x --oneline # 2. 找到要复制的提交哈希
git cherry-pick a1b2c3d # 3. 摘过来
git push
复制多个提交
git cherry-pick a1b2c3d^..e4f5g6h # 连续范围(含起点)
git cherry-pick a1 b2 c3 # 不连续的多个
git cherry-pick -n a1 b2 # -n:不提交,攒成一个提交
和其他方式怎么选
| 需求 | 命令 |
|---|---|
| 复制个别提交 | cherry-pick |
| 复制整个分支 | merge / rebase |
| 复制单个文件 | git checkout 分支 -- 路径 |
| 复制未提交的改动 | stash + pop 或 patch |
注意事项
- cherry-pick 产生新提交(哈希不同),原分支原封不动;
- 同一提交摘到多个分支后,将来这些分支合并时可能出现"重复改动"冲突;
- 摘 merge 提交要加
-m 1指定主线,一般不推荐。
常见问题(FAQ)
Q:cherry-pick 冲突了怎么办?
解决冲突文件 → git add → git cherry-pick --continue;放弃整个操作用 --abort,跳过当前用 --skip。
Q:能不能保留原提交的作者信息?
默认就保留作者(author)和原提交时间,committer 变为你。-x 参数还会在提交信息里追加来源哈希,方便追溯。
Q:复制过去后又想撤掉?
目标分支上 git revert <新提交哈希> 或没推送时 git reset --hard HEAD^。