概述解释:
当需要将某个分支中的某次或多次提交合入到其他当前分支上,可以使用
git cherry-pick
用法:
git cherry-pick [<options>] <commit-ish>...
- 单条
commit提交合并
git cherry-pick commit // 合并 commit 提交到当前分支
当 git cherry-pick 后加一个分支名,则表示将该分支顶端 commit 提交进行 cherry-pick 合并
git cherry-pick <branchname>
- 多条
commit提及合并
git cherry-pick commit1..commit2 // 合并commit1和commit2之间的所有分支 (commit1, commit2]
git cherry-pick commit1^..commit2 // 合并commit1和commit2之间的所有分支 [commit1, commit2]
常用options:
--quit 退出当前的 cherry-pick 序列
--continue 继续当前的 cherry-pick 序列
--abort 取消当前的 cherry-pick 序列,恢复当前分支
-n, --no-commit 不自动提交
-e, --edit 编辑提交信息
查看当前分支下的前 n 次提交记录并以一行展示
git log —oneline -n
情况1:
当没有成功自动提交时,则说明存在冲突
- 在编辑器中手动解决冲突,解决冲突后。
- 使用
git commit手动进行提交 或者git add .后直接git cherry-pick —continue继续
情况2:
当没有出现代码冲突的话,该命令则会自动提交
解决冲突后使用 git add . 后使用该命令会继续 cherry-pick
git cherry-pick --continue
取消某次 cherry-pick 合并,当前分支会恢复到 cherry-pick 前的状态
git cherry-pick --abort
中断某次 cherry-pick 合并,当前分支中未冲突的内容状态将为 modified 状态
git cherry-pick --quit
合并时不进行自动合并提交
git cherry-pick -n
合并时重新编辑提交的 commit 信息
git cherry-pick -e
常见问题
问题1
fatal: You are in the middle of a cherry-pick – cannot amend.
原因:
在
cherry-pick时出现冲突,没有解决冲突就执行git commit --amend命令,从而会提示该信息。
解决方案:
首先在 git commit --amend 之前解决冲突,并完成这次 cherry-pick:
$ git add .
$ git cherry-pick --continue
问题2
The previous cherry-pick is now empty, possibly due to conflict resolution.
原因:
在
cherry-pick时出现冲突,解决冲突后本地分支中内容和cherry-pick之前相比没有改变,因此当在以后的步骤中继续git cherry-pick或执行其他命令时,由于此时还处于上次cherry-pick,都会提示该信息,表示可能是由于解决冲突造成上一次cherry-pick内容是空的。
解决方案:
- 执行
git cherry-pick --abort取消上次操作。 - 执行
git commit --allow-empty表示允许空提交。