選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
5 分鐘閱讀時間 (959 個字)

[GIT] 跨 Repo 取得 commit 資料 (二) - diff + apply

image

簡介

此系列文章主要使用 Command 的方式來操作,會先介紹一下會使用到的各個 Command 使用方法與功用,再介紹實作方法,此篇為使用 diff + apply 來跨 Repository 取得 Commit 的作法。

Command 介紹

這邊預設對 Git 有一定的基礎 (clone、pull、push、log…),故僅介紹此篇主要使用的相關 Command。

diff

Diff 為比對檔案的修改紀錄,可以比對當前修改的有哪些、或是哪些 commit 區間的修改紀錄,接下來介紹幾個比較常用的方法。

  1. git diff:比對當前的修改紀錄,此比對是在執行 git add 之前的檔案。
  2. git diff --cached:這個比對的時機點是 git add 之後,git commit 之前,適用於執行 commit 之前做的檢查!
  3. git diff <commit SHA>:這個會比對填入的 commit SHA ~ 當前工作目錄區間的修改紀錄。若想要看上一個 Commit 的紀錄,可以使用 git diff HEAD^
  4. git diff <start commit SHA> <finish commit SHA>:這個就是比對兩個 commit 區間的修改紀錄囉。

簡單對一個檔案進行了調整,使用 git diff 呈現如下:

這個應該蠻好懂的,大部分可能會使用 IDE 來幫助我們去看修改紀錄,不過這個指令搭配 apply 其實就可以幫助我們匯入此次調整紀錄!

apply

Apply 對一般使用 git 的人應該會比較陌生,Apply 的功能簡單講的話,就是同意一個 Diff 檔案的修改紀錄,而這個 Diff 檔案就是由 git diff 來產生。

那同意一個 Diff 檔案是什麼意思?
他會將這個 Diff 檔案的修改紀錄,都放到暫存區裡面。

說這麼多可能還是很模糊,直接來看實作比較好暸解!
這是 Diff 檔案的樣子,其實就是 git diff 後的結果XD

那要把這個 Diff 放到暫存區,只要執行 git apply <diff file> 即可。

實作:diff + apply

若你是熟悉 Git 的使用,那這個方法你只要暸解了 DiffApply 的功能,可以知道其實也不會太難,輕鬆兩個指令就可以完成,也比起 cherry-pick 的方法精簡一些。

流程如下:

  1. 使用 git diff <commit 1> <commit 2> > update.diff 將調整紀錄輸出成一個檔案,這裡名稱為 update.diff
  2. 到我要匯入的專案裡面,使用 git apply update.diff,就會把修改紀錄會進去暫存區了!

那現在以案例來實作,目前有兩專案 main-projectsub-project,而 commit 紀錄如下圖:

main-project
sub-project

目前想要在 main-project 的 master 分支新增 sub-projecta61120 Commit 紀錄,
操作如下:

1. 先到 sub-project 專案目錄下:

2. 把 update.diff 放至 main-project 裡面,方便下個步驟直接使用

3. 切到 main-project 專案目錄下:

這樣就完成囉!
只是這個方法是將調整紀錄放進暫存區,所以後續還要自己進行 Commit 的動作,才能 Push
那可以看接下來第三個方法,也是我最推薦最方便快速的!

[GIT] 跨 Repo 取得 commit 資料 (三) - format-patch + am
[GIT] 跨 Repo 取得 commit 資料 (一) - remote + cherry-pi...

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/18, 週六

Captcha 圖像