git cherry-pick 指令用于复制一些提交,比如我有一个新分支,我想直接把旧分支的某个提交连带着对应的代码改动也一起复制过来
用法
单个commitId
git cherry-pick [旧分支的commitId] 即可,不用管这个commitid在哪个分支上
多个commitId
如果是多个那就 git cherry-pick commitid1 commitid2 即可,两个commitid中间用空格隔开
选择一个区间
如果是想要复制一个区间,但是又懒得一个个输入,那么只需要找起点和终点的commitId即可
git cherry-pick commitid1..commitid2, 此时commitid1是起点,commitid2是终点,这样复制过来的提交是不包含起点的,也就是不包含commitId1
如果想要包含起点呢
git cherry-pick commitid1^..commitid2,多加一个^ 就能包含上起点了
那么坑点就来了
神坑
所有能搜到的技术文档和博客,以及AI问答,都告诉你^是包含起点的,但是在windows的cmd上或者cmder,或者Terminal 上输入,都不会包含起点

image.png
用git log 输出可以看出,带^ 和不带 没有区别,输出的内容一样,都是不包含起点
这是因为^ 在windows的终端上是转义符,而linux/unix上转义符是\,所以这里的^就被当成转义符吞掉了
解决
既然^是转义符,那么多转义一次就行了,额外把这个^给转义掉
所以在windows上的cherry-pick 就得改成
git cherry-pick commitid1^^..commitid2 多加一个^