git高级特性之 - cherry-pick
文章目錄
- 背景
- 介紹
- 配置項
- -e,--edit
- -n,--no-commit
- -x
- -s,--signoff
- -m parent-number,--mainline parent-number
- 實踐案例
- 自動提交
- 不自動提交
- 增加額外說明信息
- 重新編輯提交信息
- 有沖突的情況
- cherry-pick分支
- 一次pick連續(xù)的多個提交
- 轉移到另一個代碼庫
背景
在開發(fā)過程中,我們一般會使用多分支來管理開發(fā)。在特殊情況下,其中一個分支的改動,我想搬到我的另一個分支(它會作為一個新的提交引入到你當前分支上),關于這種操作,如果使用git 的話,那就可以做到了,這就是我們這篇博客想要介紹的 git cherry-pick 高級特性。
介紹
git cherry-pick命令的作用,就是將指定的提交(commit)應用于其他分支。
首先看下官方介紹: 運行下面的命令
git help cherry-pick基本語法:
git cherry-pick [--edit] [-n] [-m parent-number] [-s] [-x] [--ff][-S[<keyid>]] <commit>…? git cherry-pick --continue git cherry-pick --quit git cherry-pick --abort其中: -n, --no-commit 不自動提交 -e, --edit 編輯提交信息配置項
git cherry-pick命令的常用配置項如下。
-e,–edit
打開外部編輯器,編輯提交信息。
-n,–no-commit
只更新工作區(qū)和暫存區(qū),不產生新的提交。
-x
在提交信息的末尾追加一行(cherry picked from commit …),方便以后查到這個提交是如何產生的。
-s,–signoff
在提交信息的末尾追加一行操作者的簽名,表示是誰進行了這個操作。
-m parent-number,–mainline parent-number
如果原始提交是一個合并節(jié)點,來自于兩個分支的合并,那么 Cherry pick 默認將失敗,因為它不知道應該采用哪個分支的代碼變動。
-m配置項告訴 Git,應該采用哪個分支的變動。它的參數parent-number是一個從1開始的整數,代表原始提交的父分支編號。
git cherry-pick -m 1 <commitHash>上面命令表示,Cherry pick 采用提交commitHash來自編號1的父分支的變動。
一般來說,1號父分支是接受變動的分支(the branch being merged into),2號父分支是作為變動來源的分支(the branch being merged from)。
實踐案例
自動提交
如果沒有出現沖突,該命令將自動提交。
git cherry-pick <commit_id>當cherry-pick時,沒有成功自動提交,這說明存在沖突,因此首先需要解決沖突,解決沖突后需要git commit手動進行提交;
或者git add .后直接使用git cherry-pick --continue繼續(xù)。
不自動提交
參數 -n,–no-commit
只更新工作區(qū)和暫存區(qū),不產生新的提交。
增加額外說明信息
git cherry-pick -x <commit_id>在原來的提交信息下,增加一行額外說明信息(cherry picked from commit …),用來說明該次commit是從哪里cherry-pick的。
如果是從自己的私人分支之間做這個操作,就不要使用這個,這樣的信息是無用的。
如果是cherry-pick別的同事的提交,可以使用這個參數,這個額外信息將非常有用。
重新編輯提交信息
如果想要在cherry-pick后重新編輯提交信息,則使用git cherry-pick -e命令
git cherry-pick -e <commit_id>有沖突的情況
如果在執(zhí)行git cherry-pick時遇到沖突,一般會有下面的幾種提示:
git cherry-pick --continue git cherry-pick --quit git cherry-pick --abort如果要繼續(xù)cherry-pick,則首先需要解決沖突,通過git add .將文件標記為已解決,然后可以使用git cherry-pick --continue命令,繼續(xù)進行cherry-pick操作。
如果要中斷這次cherry-pick,則使用git cherry-pick --quit,這種情況下當前分支中未沖突的內容狀態(tài)將為modified,
如果要取消這次cherry-pick,則使用git cherry-pick --abort,這種情況下當前分支恢復到cherry-pick前的狀態(tài),沒有改變。
cherry-pick分支
git cherry-pick <branchname>如果在git cherry-pick后加一個分支名,則表示將該分支最近一次提交,轉移到當前分支。
一次pick連續(xù)的多個提交
語法如下:
git cherry-pick <commit_id_0>..<commit_id_n>中間的兩個點,表示把兩個commit區(qū)間的所有commit都復制過去。
注意:
上面的操作,不會包含第一個commit_id_0,即只會復制(commit_id_1 到 commit_id_n)。
所以使用時,記得算好第一個commit id。
如果要包含第一個commit_id_0提交,可以使用下面的語法:
git cherry-pick <commit_id_0>^..<commit_id_n>注意,多了一個符號^
轉移到另一個代碼庫
Cherry pick 也支持轉移另一個代碼庫的提交,方法是先將該庫加為遠程倉庫。
git remote add target git://gitUrl上面命令添加了一個遠程倉庫target。
然后,將遠程代碼抓取到本地。
git fetch target上面命令將遠程代碼倉庫抓取到本地。
接著,檢查一下要從遠程倉庫轉移的提交,獲取它的哈希值。
git log target/master最后,使用git cherry-pick命令轉移提交。
git cherry-pick <commitHash>總結
以上是生活随笔為你收集整理的git高级特性之 - cherry-pick的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【VBA编程】Sub过程
- 下一篇: 【CSDN|每日一练】小艺的英文名