git cherry-pick 的使用


1、使用方法及其作用

  git cherry-pick可以選擇某一個分支中的一個或幾個commit(s)來進行操作(操作的對象是commit)。例如,假設我們有個穩定版本的分支,叫v2.0,另外還有個開發版本的分支v3.0,我們不能直接把兩個分支合並,這樣會導致穩定版本混亂,但是又想增加一個v3.0中的功能到v2.0中,這里就可以使用cherry-pick了。

  就是對已經存在的commit 進行 再次提交;

使用方法如下:

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 0771a0c107dbf4c96806d22bbc6ef4c58dfe7075
Author: zhengcanrui <zhengcanrui@cvte.com>
Date:   Mon Aug 8 14:41:54 2016 +0800

    [modify] [what] commit的備注信息 

  其中0771a0c107dbf4c96806d22bbc6ef4c58dfe7075就是我們的commit id

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

應用背景

 

假設我們需要將dev_01上的兩個commit 合並到dev_02上,兩個commit的commit id 分別如下:

20c2f506d789bb9f041050dc2c1e954fa3fb6910
2633961a16b0dda7b767b9264662223a2874dfa90
那我們可以這樣寫:
git cherry-pick
20c2f506d789bb9f041050dc2c1e954fa3fb6910
2633961a16b0dda7b767b9264662223a2874dfa9
多個commit-hash使用空格分割, commit-hash最好按提交時間先后排列, 即最先提交的commit放在前面.

注意:上面這條cherry-pick命令每揀選一個commit就會提交一次生成一個新的commit id。 如果我們想讓每個commit 揀選后暫緩提交,等到所有commit都揀選完成后,自己手動commit,應該怎么辦呢?答案是用-n 選項:

git cherry-pick -n
20c2f506d789bb9f041050dc2c1e954fa3fb6910
2633961a16b0dda7b767b9264662223a2874dfa9
這樣,當git cherry-up后,這兩個commit上的更改就被merge到本地的dev_02分支了,此時這些更改就像是你再dev_02分支上自己手動添加的一樣,注意此時這些更改並沒有被提交。
執行git status 會列出這些改動。

此時,就可以按正常流程(git commit, git push)來提交改動了


免責聲明!

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



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