此系列文章主要使用 Command 的方式來操作,會先介紹一下會使用到的各個 Command 使用方法與功用,再介紹實作方法,此篇為使用 diff + apply 來跨 Repository 取得 Commit 的作法。
此系列文章共有三篇,對其他做法有興趣可以直接查看:
這邊預設對 Git 有一定的基礎 (clone、pull、push、log…),故僅介紹此篇主要使用的相關 Command。
Diff 為比對檔案的修改紀錄,可以比對當前修改的有哪些、或是哪些 commit 區間的修改紀錄,接下來介紹幾個比較常用的方法。
git diff
:比對當前的修改紀錄,此比對是在執行 git add
之前的檔案。git diff --cached
:這個比對的時機點是 git add
之後,git commit
之前,適用於執行 commit 之前做的檢查!git diff <commit SHA>
:這個會比對填入的 commit SHA ~ 當前工作目錄區間的修改紀錄。若想要看上一個 Commit 的紀錄,可以使用 git diff HEAD^
。git diff <start commit SHA> <finish commit SHA>
:這個就是比對兩個 commit 區間的修改紀錄囉。簡單對一個檔案進行了調整,使用 git diff
呈現如下:
這個應該蠻好懂的,大部分可能會使用 IDE 來幫助我們去看修改紀錄,不過這個指令搭配 apply
其實就可以幫助我們匯入此次調整紀錄!
Apply 對一般使用 git 的人應該會比較陌生,Apply 的功能簡單講的話,就是同意一個 Diff 檔案的修改紀錄,而這個 Diff 檔案就是由 git diff
來產生。
那同意一個 Diff 檔案是什麼意思?
他會將這個 Diff 檔案的修改紀錄,都放到暫存區裡面。
說這麼多可能還是很模糊,直接來看實作比較好暸解!
這是 Diff 檔案的樣子,其實就是 git diff
後的結果XD
那要把這個 Diff 放到暫存區,只要執行 git apply <diff file>
即可。
若你是熟悉 Git 的使用,那這個方法你只要暸解了 Diff
與 Apply
的功能,可以知道其實也不會太難,輕鬆兩個指令就可以完成,也比起 cherry-pick
的方法精簡一些。
流程如下:
git diff <commit 1> <commit 2> > update.diff
將調整紀錄輸出成一個檔案,這裡名稱為 update.diff
git apply update.diff
,就會把修改紀錄會進去暫存區了!那現在以案例來實作,目前有兩專案 main-project
、sub-project
,而 commit 紀錄如下圖:
目前想要在 main-project
的 master 分支新增 sub-project
的 a61120
Commit 紀錄,
操作如下:
1. 先到 sub-project
專案目錄下:
2. 把
update.diff
放至
main-project
裡面,方便下個步驟直接使用
3. 切到 main-project
專案目錄下:
這樣就完成囉!
只是這個方法是將調整紀錄放進暫存區,所以後續還要自己進行 Commit
的動作,才能 Push
呦
那可以看接下來第三個方法,也是我最推薦最方便快速的!