Git使用小技巧之挑揀合併

想要獲取更多文章能夠訪問個人博客 - 代碼無止境git

先想一想一個狀況,如今咱們有一個功能急須要發佈到線上,可是這個功能相關的代碼所在的測試分(test)支有不少不該該發佈的代碼,那麼這個時候咱們就須要將與這個代碼相關的提交選擇性的合併到master上併發布。若是你還不知道git cherry-pick命令的話,頗有可能你會從master分支上檢出一個新分支,而後在把相關的代碼copy到新分支上而後再合併回master。固然這麼作確實能夠達到最終的目的,可是手動copy很容易遺漏某些東西,那麼咱們這篇文章就來說解一下git cherry-pick命令。bash

準備

1.準備一個空的git倉庫,並建立一個readme文件而後提交。併發

mkdir git-test
cd git-test
git init
touch README.md
git add README.md
git commit -m "第一次提交"
複製代碼

2.基於master建立一個新的分支dev測試

git checkout -b dev
複製代碼

3.修改兩次README.md文件,並commit兩次。執行git log後咱們會看到以下內容:ui

$ git log
commit cc04beabf0678f54bf64635bd56160c78b0aa1e6 (HEAD -> dev)
Author: 代碼無止境 <gancy.programmer@gmail.com>
Date:   Mon Jun 17 18:35:44 2019 +0800

    第三次提交

commit 32259aa35d0702d2d05c648938798f9a5bd4b9e7
Author: 代碼無止境 <gancy.programmer@gmail.com>
Date:   Mon Jun 17 18:35:23 2019 +0800

    第二次提交

commit e7f478807d478a0c3e0af8659e0733a9d5b32c8b (master)
Author: 代碼無止境 <gancy.programmer@gmail.com>
Date:   Mon Jun 17 18:34:09 2019 +0800

    第一次提交
複製代碼

git cherry-pick

通過上面的步驟一個git cherry-pick的使用場景就已經被咱們模擬出來了。假如說咱們如今dev上的第二次提交就是咱們如今急須要發佈的功能,那麼咱們就須要使用git cherry-pick命令將此次提交合併到master分支上。 1.在dev分支上執行git log命令,找到目標commit的commitid. 2.切換到master分支spa

git checkout master
複製代碼

3.執行git cherry-pick命令code

git cherry-pick 32259aa35d0702d2d05c648938798f9a5bd4b9e7
複製代碼

4.再次執行git log命令就能夠看到目標提交已經被合併到master上了get

$ git log
commit 845d18e1193e4ad4361c8065173ed9b96fcc5227 (HEAD -> master)
Author: 代碼無止境 <gancy.programmer@gmail.com>
Date:   Mon Jun 17 18:35:23 2019 +0800

    第二次提交

commit e7f478807d478a0c3e0af8659e0733a9d5b32c8b
Author: 代碼無止境 <gancy.programmer@gmail.com>
Date:   Mon Jun 17 18:34:09 2019 +0800

    第一次提交
複製代碼

git cherry-pick 相關參數

上面只是git cherry-pick命令的簡單用法,其實這個命令還提供了很多的參數。博客

git cherry-pick [<options>] <commit-ish>...

經常使用options:
    --quit                退出當前的chery-pick序列
    --continue            繼續當前的chery-pick序列
    --abort               取消當前的chery-pick序列,恢復當前分支
    -n, --no-commit       不自動提交
    -e, --edit            編輯提交信息
複製代碼

若是咱們執行git cherry-pick合併以後發生了衝突,這個時候Git會自動幫咱們新建一個分支,以下所示:string

MINGW64 ~/Desktop/p/write/筆記/git-test (master|CHERRY-PICKING)
複製代碼

若是咱們想取消此次合併能夠執行git cherry-pick --quit或者git cherry-pick --abort命令取消此次挑揀。 兩者不一樣的地方在於前者會將當前分支中未衝突的內容狀態變爲modified, 然後者則會直接將當前分支的內容回退到挑揀以前的狀態。固然若是咱們也能夠解決衝突以後執行以下命令繼續合併:

git add *
git cherry-pick --continue
複製代碼

後面的-n-e,就比較容易理解了,-n就是挑揀後不會自動提交,須要咱們執行git commit命令進行提交,而-e則是能夠改變挑揀的message信息。

相關文章
相關標籤/搜索