git命令之cherry-pick


git cherry-pick合並某個commit

git cherry-pick可以選擇某一個分支中的一個或幾個commit(s)來進行操作(操作的對象是commit)。


1、使用方法&需求

場景:

假設我們有個穩定版本的分支,叫v2.0,另外還有個開發版本的分支v3.0,我們不能直接把兩個分支合並,這樣會導致穩定版本混亂,但是又想增加一個v3.0中的功能到v2.0中,這里就可以使用cherry-pick了。

使用方法:

git cherry-pick <commit id>

查詢commit id 的查詢可以使用git log查詢(查詢版本的歷史),最簡單的語法如下:

git log

詳細的git log 語法如下:

  git log [<options>] [<since>..<until>] [[--] <path>...]

      主要參數選項如下:

             -p:按補丁顯示每個更新間的差異

            --stat:顯示每次更新的修改文件的統計信息

            --shortstat:只顯示--stat中最后的行數添加修改刪除統計

            --name-only:盡在已修改的提交信息后顯示文件清單

            --name-status:顯示新增、修改和刪除的文件清單

            --abbrev-commit:僅顯示SHA-1的前幾個字符,而非所有的40個字符

            --relative-date:使用較短的相對時間顯示(例如:"two weeks ago")

            --graph:顯示ASCII圖形表示的分支合並歷史

            --pretty:使用其他格式顯示歷史提交信息

結果大概如下:

commit 3b64693a060a8cf07c66a9545ef969d52f9cbe8c
Author: domi.song <domi.song@cloudwise.com>
Date: Tue Jun 25 22:07:49 2019 +0800

Fixed #TSB-11111 提交內容

其中3b64693a060a8cf07c66a9545ef969d52f9cbe8c就是我們的commit id;

注意:當執行完 cherry-pick 以后,將會 生成一個新的提交;這個新的提交的哈希值和原來的不同,但標識名 一樣;(commit id會變)

 


 2、實例參考

首先切換到你要添加commit的分支,如:你要將A分支上面的commit添加到B分支上面,我們可以要先切換到B分支上面。(注意:cherry-pick是一個本地的操作,假如你pull代碼之后有人在A分支上有了新的commit,需要你先pull代碼在進行cherry-pick,原因及其錯誤提示請見最后)。

git checkout B

3b64693a060a8cf07c66a9545ef969d52f9cbe8c這個commit(提交)合並到B分支上面。正常情況下,可以給出全部的commit id,也可以只給出前面的一段,只要你提交中沒有這一段重復的就好,剩下的部分git會幫你填充。

git cherry-pick 3b64693a060a8cf07c6  #將上面的commit id為3b64693a060a8cf07c66a9545ef969d52f9cbe8c的提交添加到B分支上面

結果:

1.成功的情況

  順利的話,出現下面的情況證明你已經成功了

DomideMacBook-Pro: songpengju$ git cherry-pick 583f3b1201999aaaf0728ad73dcb132c00744531
[biguiyuan-v6.5-report-browser-mobile-new 8fd59f0c5c]   Fixed #TSB-11111 XXXXXXXX
 Author: bert <domi.song@yunzhihui.com>
 Date: Wed Jun 26 19:08:49 2019 +0800
 1 file changed, 10 insertions(+)

2.有沖突的情況

  下面是有文件沖突,和 XXXXXXXXXXXXXXXXXXXX 這個提交沖突,如下圖:

 解決的沖突的方法也和普通的一樣,手工檢查。

1)查看沖突的文件

  使用git status

2)打開上面的那個文件,解決沖突。 執行add命令、執行commit命令,最后在提交即可了

  此處推薦一個git可視化工具--GitKraKen,比較好用,親測


 

3、一些錯誤

使用下面cherry-pick命令執行某個commit (編號為:77c6905dcf7f946cff594a69a33d12e22bedfae4)

git cherry-pick 77c6905dcf7f946cff594a69a33d12e22bedfae4

出現了如下的錯誤:

fatal: bad object 77c6905dcf7f946cff594a69a33d12e22bedfae4

場景及出現錯誤的原因:

      我的情況是在B分支的同步A分支的一個commit,出現了如標題的錯誤。我是直接在web上看到A分支新提交的這個commit,然后我直接在本地的B分支中進行git cherry-pick xxx。就出現了這個問題。經過嘗試問題是出在了我沒有切到B分支pull一下。總結過來就是git cherry-pick是本地特性,本地要有這個commit才可以被git cherry-pick

 

致謝:感謝您的閱讀!有錯誤請加以糾正,有其他欠缺的東西請不吝賜教,謝謝!

PS:參考連接:https://www.cnblogs.com/0201zcr/p/5752771.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM