日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git高级特性之 - cherry-pick

發(fā)布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 -n <commit_id>

增加額外說明信息

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。