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)來提交改動了