此系列文章主要使用 Command 的方式來操作,會先介紹一下會使用到的各個 Command 使用方法與功用,再介紹實作方法,此篇為使用 Remote + Cherry-pick 來跨 Repository 取得 Commit 的作法。
此系列文章共有三篇,對其他做法有興趣可以直接查看:
這邊預設對 Git 有一定的基礎 (clone、pull、push、log...),故僅介紹此篇主要使用的相關 Command。
Remote 為管理遠端 Repository 的功能,並可對每個連結的 Repository 設定名稱。
在 git clone
之後,會有一個預設的名稱 origin
,這是 git 給的預設名稱。
可以使用 git remote
查看目前有設定的 remote。
使用 git remote -v
可以查看名稱 + Repository Url。
使用 git remote add <名稱> <git repo url>
新增連結的遠端 Repository。
可以檢查一下剛剛新增的 remote,確認關聯成功!
目前設定了一個 sub
的遠端,但是可以發現目前沒有抓取此 Repo 的任何資訊,使用 git log
可觀察到目前還不認識 sub 裡面 master 這個分支。
那接下來進入下個章節 fetch
學習抓取 sub
這個遠端的資訊。
Fetch 可以抓取遠端資訊,把目前還沒載下來的資訊都抓下來。
現在我們把上一個指令中新增的 sub
Repository 下載下來。
可以驗證一下,現在下載完成了,再試一下 git log
,可以查看到 sub 的 master 分支 commit 內容囉!
cherry-pick 的功能是「撿分支」,假如你目前的分支只想要其他分支的某幾個 Commit,那就很適合使用 cherry-pick 這個功能。
使用方法為:git cherry-pick <commit SHA>
目前專案分支如下,有兩條分支 master
、create-menu
。
那現在想要將 create-menu
的 91ccde
(Create menu txt.) 紀錄放到 master
分支上,
但不希望 056791
(Update menu txt.) 也併到 master
上,
那這個情境就很適合使用 cherry-pick 這個方法。
僅要將目前的分支先切到 master
,然後使用 cherry-pick 想要的紀錄(91ccde
),即可完成囉!
再觀察一下線圖,可以看到 Commit 紀錄也存在於 master
的分支上囉~
--no-commit
,那僅會將調整紀錄放至暫存區。這個方法最好懂,也最適合新手,方法就是去撿想要的 Commit 紀錄過來。
流程如下:
git remote
遠端想要的 Repositorygit fetch
剛剛設定的 Remotegit cherry-pick
把想要的分支撿過來,就完成囉!那現在以案例來實作,目前有兩專案 main-project
、sub-project
,而 commit 紀錄如下圖:
目前想要在 main-project
的 master 分支新增 sub-project
的 a61120
Commit 紀錄,
操作如下:
觀察 git graph,有成功將 Commit 紀錄新增在 main-project
的 master
中了。