0%

git cherry-pick 使用

背景

项目有两个分支同时在进行开发,A和B,之前在提交代码的时候,本来是应该提交到B,结果一直是提交到A中了,现在应用要发布,A中包含着别人的代码,不能一起发上去,于是现在只想把A中自己提交的部分pick出来,然后进行发布

使用 方法

  1. 使用git logs查看到自己的提交记录,找到自己提交的commitId并记录下来

https://iotxing-1253163150.cos.ap-shanghai.myqcloud.com/gitlog.jpg

  1. 选择要pick的记录,执行
1
git cherry-pick eaa909 (要pick出来的hash值)

如果提示下面的错误,则说明要pick的commit是一个merge的commit,需要使用参数 -m ,后面加上属于1或者2,1或者2表示在出现冲突的时候,以哪个代码分支作为parent。如果是1的话,就是说将当前的代码作为parent,然后接受来自要pick的代码的变动。

这里我是需要将远程的merge操作同步到我本地,因此我使用的是2

1
2
error: commit eaa909f0a353778f339b3a8c52611d2cfcd20c89 is a merge but no -m option was given.
fatal: cherry-pick failed
1
git cherry-pick -m 1 03c3c85d
  1. 如果涉及到要同步多个连续commit,则可以使用范围pick。将开始的commit和结束的commit用两个小数点进行连接,注意!区间pick是左开右闭的范围,也就是说不包含开始的commit,包含结束的commit。

以下面为例,就是最终合并的代码中不包含startHash,包含endHash

1
git cherry-pic startHash..endHash