git cherry-pick 基本使用

3,670 阅读2分钟

概述解释:

当需要将某个分支中的某次或多次提交合入到其他当前分支上,可以使用 git cherry-pick

用法:

git cherry-pick [<options>] <commit-ish>...
  1. 单条 commit 提交合并
git cherry-pick commit	// 合并 commit 提交到当前分支

git cherry-pick 后加一个分支名,则表示将该分支顶端 commit 提交进行 cherry-pick 合并

git cherry-pick <branchname>
  1. 多条 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:

当没有成功自动提交时,则说明存在冲突

  1. 在编辑器中手动解决冲突,解决冲突后。
  2. 使用 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 内容是空的。

解决方案:

  1. 执行 git cherry-pick --abort 取消上次操作。
  2. 执行 git commit --allow-empty 表示允许空提交。