git format-patch 製作 patch 與匯入 patch

本篇介紹 git-format-patch 製作 patch 與匯入 patch,git 提供了兩種 patch 方案。 一種是用 git diff 產生標準 patch (.diff 檔案),另一種是 git format-patch 生成的 git 專用 patch (.patch 檔案),以下兩種都會介紹。

以下 git 製作 patch 用法介紹將分為這幾部份,

  • git format-patch 製作 patch
  • git 匯入 patch
  • git 製作標準 diff patch
  • git 匯入標準 diff patch

那我們開始吧!

git format-patch 製作 patch

git format-patch 製作最新1筆 patch,

1
git format-patch -1

git format-patch 製作最新3筆 patch,

1
git format-patch -3

git format-patch 製作某個 commit 到最新 commit 的 patch,

1
git format-patch sha1111111111111111111111111111111111111

git format-patch 製作某個 commit 以前 1 筆的 patch,

1
git format-patch -1 sha1111111111111111111111111111111111111

git format-patch 製作某個 commit 以前 3 筆的 patch,

1
git format-patch -3 sha1111111111111111111111111111111111111

git format-patch 製作從 root 到最新 commit 的 patch,

1
git format-patch --root

git format-patch 製作從指定 commit 到結束 commit 的 patch,

1
git format-patch abcd123..abcd456

git format-patch 加上 -o 選項可以指定輸出的目錄,

1
git format-patch abcd123..abcd456 -o /home/shengyu/Download/

git 匯入 patch

這邊介紹 git 匯入 patch,

1
2
3
4
git am --abort # 假如之前匯入失敗的話 可以使用 git am --abort 取消之前的匯入
git am 0001-xxx.patch # 匯入 patch 檔案
# or
git am -s 0001-xxx.patch # 匯入 patch 檔案並加上 sign off 簽字

git 匯入指定目錄下的 patch,

1
git am /home/shengyu/Download/*

在匯入 patch 遇到衝突時,可以執行 git am --skip 跳過此次衝突,也可以執行 git am --abort 取消匯入 patch 的動作,還原到操作前的狀態。

除了用 git am 也可以用 git apply,以下是用 git apply 檢查 patch,確保 patch 檔案沒有問題,

1
git apply --stat 0001-xxx.patch

git apply 檢查 patch 套用後是否會有問題,

1
git apply --check 0001-xxx.patch

git apply 匯入 patch 改動但不 commit,

1
git apply 0001-xxx.patch

git 製作標準 diff patch

這邊介紹 git diff 製作標準 diff patch,也就是 diff 檔,將 track 但 not stage 的改動製作 diff,

1
git diff ./ > xxx-patch.diff

git diff 製作從指定 commit 到結束 commit 的 diff patch,

1
git diff abcd123 abcd456 > xxx-patch.diff

git 匯入標準 diff patch

這邊介紹 git 匯入標準 diff patch(沒有包含 commit),

1
2
3
patch -p1 < xxx-patch.diff
# or
git apply xxx-patch.diff

以上就是 git format-patch 製作 patch 與匯入 patch 的用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!