git cherry-pick 指令用于復(fù)制一些提交,比如我有一個新分支,我想直接把舊分支的某個提交連帶著對應(yīng)的代碼改動也一起復(fù)制過來
用法
單個commitId
git cherry-pick [舊分支的commitId] 即可,不用管這個commitid在哪個分支上
多個commitId
如果是多個那就 git cherry-pick commitid1 commitid2 即可,兩個commitid中間用空格隔開
選擇一個區(qū)間
如果是想要復(fù)制一個區(qū)間,但是又懶得一個個輸入,那么只需要找起點和終點的commitId即可
git cherry-pick commitid1..commitid2, 此時commitid1是起點,commitid2是終點,這樣復(fù)制過來的提交是不包含起點的,也就是不包含commitId1
如果想要包含起點呢
git cherry-pick commitid1^..commitid2,多加一個^ 就能包含上起點了
那么坑點就來了
神坑
所有能搜到的技術(shù)文檔和博客,以及AI問答,都告訴你^是包含起點的,但是在windows的cmd上或者cmder,或者Terminal 上輸入,都不會包含起點

用git log 輸出可以看出,帶^ 和不帶 沒有區(qū)別,輸出的內(nèi)容一樣,都是不包含起點
這是因為^ 在windows的終端上是轉(zhuǎn)義符,而linux/unix上轉(zhuǎn)義符是\,所以這里的^就被當(dāng)成轉(zhuǎn)義符吞掉了
解決
既然^是轉(zhuǎn)義符,那么多轉(zhuǎn)義一次就行了,額外把這個^給轉(zhuǎn)義掉
所以在windows上的cherry-pick 就得改成
git cherry-pick commitid1^^..commitid2 多加一個^