当有冲突而不能完成整个cherry pick时:
HEAD保持不变,仍然指向当前分支的最后一次commit。
CHERRY_PICK_HEAD,指向要cherry-pick的commit。
没有冲突的路径,更新index和working tree。
对于有冲突的路径:
Index会保存3个版本,可以用git ls-files --unmerged命令查看。
Working tree保存的是合并之后的结果,冲突的部分用<<<<<<<和>>>>>>>标记。
冲突的文件 git status显示均为Unmerged path:
$ git st
On branch master
You are currently cherry-picking commit ddfcee4.
(fix conflicts and run "git cherry-pick --continue")
(use "git cherry-pick --abort" to cancel the cherry-pick operation)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: c
git diff显示的是冲突部分的内容:
$ git diff .
diff --cc c
index bc645ae,80fd1c5..0000000
--- a/c
+++ b/c
@@@ -2,7 -2,7 +2,11 @@@ c0
unchagned
unchagned
unchagned
++<<<<<<< HEAD
+c11
++=======
+ c12
++>>>>>>> ddfcee4... test changed
unchagned
unchagned
unchagned
ls-files显示c的个文件,stage分别为1,2,3
$ git ls-files -u
100644 19f0f44f7b31f79b3fc29e264beb4d5fb94752bd 1 c
100644 bc645ae15b8eb588d3024ce0d2d3231b0383d69f 2 c
100644 80fd1c5b6663ff5746855ecd4af3ea665a041d43 3 c
参考:
https://git-scm.com/docs/git-cherry-pick
https://git-scm.com/docs/git-merge