簡體中文 ▾ 主題 ▾ 最新版本 ▾ git-am 最後更新於 2.50.0

名稱

git-am - 從郵箱中應用一系列補丁

概要

git am [--signoff] [--keep] [--[no-]keep-cr] [--[no-]utf8] [--no-verify]
	 [--[no-]3way] [--interactive] [--committer-date-is-author-date]
	 [--ignore-date] [--ignore-space-change | --ignore-whitespace]
	 [--whitespace=<action>] [-C<n>] [-p<n>] [--directory=<dir>]
	 [--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet]
	 [--[no-]scissors] [-S[<keyid>]] [--patch-format=<format>]
	 [--quoted-cr=<action>]
	 [--empty=(stop|drop|keep)]
	 [(<mbox> | <Maildir>)…​]
git am (--continue | --skip | --abort | --quit | --retry | --show-current-patch[=(diff|raw)] | --allow-empty)

描述

將郵箱中的郵件訊息拆分為提交日誌訊息、作者資訊和補丁,並將其應用到當前分支。您可以將其視為在具有直線歷史(無合併)的分支上執行 git-format-patch[1] 的反向操作。

選項

(<mbox>|<Maildir>)…​

要讀取補丁的郵箱檔案列表。如果您未提供此引數,命令將從標準輸入讀取。如果您提供目錄,它們將被視為 Maildir。

-s
--signoff

在提交訊息中新增一個 Signed-off-by 附言,使用您自己的提交者身份。有關更多資訊,請參閱 git-commit[1] 中的 signoff 選項。

-k
--keep

-k 標誌傳遞給 git mailinfo(參見 git-mailinfo[1])。

--keep-non-patch

-b 標誌傳遞給 git mailinfo(參見 git-mailinfo[1])。

--[no-]keep-cr

使用 --keep-cr 時,以相同的選項呼叫 git mailsplit(參見 git-mailsplit[1]),以防止其剝離行尾的 CR。am.keepcr 配置變數可用於指定預設行為。--no-keep-cr 用於覆蓋 am.keepcr

-c
--scissors

移除正文中剪刀線之前的所有內容(參見 git-mailinfo[1])。可以使用 mailinfo.scissors 配置變數預設啟用。

--no-scissors

忽略剪刀線(參見 git-mailinfo[1])。

--quoted-cr=<action>

此標誌將傳遞給 git mailinfo(參見 git-mailinfo[1])。

--empty=(drop|keep|stop)

如何處理缺少補丁的電子郵件訊息

drop

該電子郵件訊息將被跳過。

keep

將建立一個空提交,電子郵件訊息的內容作為其日誌。

stop

命令將失敗,並在當前的 am 會話中途停止。這是預設行為。

-m
--message-id

-m 標誌傳遞給 git mailinfo(參見 git-mailinfo[1]),以便將 Message-ID 頭部新增到提交訊息中。am.messageid 配置變數可用於指定預設行為。

--no-message-id

不要將 Message-ID 頭部新增到提交訊息中。no-message-id 用於覆蓋 am.messageid

-q
--quiet

安靜模式。只打印錯誤訊息。

-u
--utf8

-u 標誌傳遞給 git mailinfo(參見 git-mailinfo[1])。從電子郵件中獲取的建議提交日誌訊息將被重新編碼為 UTF-8 編碼(如果專案首選編碼不是 UTF-8,則可以使用配置變數 i18n.commitEncoding 進行指定)。

這在早期版本的 Git 中是可選的,但現在是預設行為。您可以使用 --no-utf8 來覆蓋此設定。

--no-utf8

-n 標誌傳遞給 git mailinfo(參見 git-mailinfo[1])。

-3
--3way
--no-3way

當補丁不能幹淨地應用時,如果補丁記錄了它應該應用到的 blob 的身份,並且我們在本地有這些 blob,則回退到三方合併。--no-3way 可用於覆蓋 am.threeWay 配置變數。有關更多資訊,請參閱 git-config[1] 中的 am.threeWay。

--rerere-autoupdate
--no-rerere-autoupdate

當 rerere 機制重用當前衝突上的記錄解決方案來更新工作樹中的檔案後,允許它也用解決方案的結果更新索引。--no-rerere-autoupdate 是在透過單獨的 git add 將結果提交到索引之前,仔細檢查 rerere 所做的工作並捕獲潛在的錯誤合併的好方法。

--ignore-space-change
--ignore-whitespace
--whitespace=<action>
-C<n>
-p<n>
--directory=<dir>
--exclude=<path>
--include=<path>
--reject

這些標誌被傳遞給應用補丁的 git apply 程式(參見 git-apply[1])。

--whitespace 選項的有效 <action> 有:nowarnwarnfixerrorerror-all

--patch-format

預設情況下,命令將嘗試自動檢測補丁格式。此選項允許使用者繞過自動檢測,並指定補丁應被解釋為的格式。有效格式包括 mbox、mboxrd、stgit、stgit-series 和 hg。

-i
--interactive

互動式執行。

-n
--no-verify

預設情況下,會執行 pre-applypatch 和 applypatch-msg 鉤子。當給出 --no-verify-n 時,這些鉤子將被跳過。另請參閱 githooks[5]

--committer-date-is-author-date

預設情況下,命令將電子郵件訊息中的日期記錄為提交作者日期,並將提交建立時間用作提交者日期。這允許使用者透過使用與作者日期相同的值來更改提交者日期。

--ignore-date

預設情況下,命令將電子郵件訊息中的日期記錄為提交作者日期,並將提交建立時間用作提交者日期。這允許使用者透過使用與提交者日期相同的值來更改作者日期。

--skip

跳過當前補丁。這僅在重新開始一個已中止的補丁時有意義。

-S[<keyid>]
--gpg-sign[=<keyid>]
--no-gpg-sign

使用 GPG 簽名提交。keyid 引數是可選的,預設為提交者身份;如果指定,它必須緊貼選項,不能有空格。--no-gpg-sign 可用於同時取消 commit.gpgSign 配置變數和先前的 --gpg-sign 設定。

--continue
-r
--resolved

補丁應用失敗後(例如,嘗試應用衝突的補丁),使用者已手動應用它,並且索引檔案儲存了應用結果。使用從電子郵件訊息中提取的作者身份和提交日誌以及當前索引檔案進行提交,然後繼續。

--resolvemsg=<msg>

當補丁應用失敗時,<msg> 將在退出前列印到螢幕上。這會覆蓋提示您使用 --continue--skip 處理失敗的標準訊息。這僅供 git rebasegit am 之間內部使用。

--abort

恢復原始分支並中止補丁操作。將參與 am 操作的檔案內容還原到其 am 前的狀態。

--quit

中止補丁操作,但保持 HEAD 和索引不變。

--retry

嘗試再次應用最後一個衝突的補丁。這通常只在向重試嘗試傳遞額外選項(例如 --3way)時有用,否則您只會再次看到相同的失敗。

--show-current-patch[=(diff|raw)]

顯示 git am 因衝突而停止的訊息。如果指定了 raw,則顯示電子郵件訊息的原始內容;如果指定了 diff,則只顯示差異部分。預設為 raw

--allow-empty

如果輸入的電子郵件訊息缺少補丁,在補丁應用失敗後,建立一個空提交,其日誌訊息內容為電子郵件訊息的內容。

討論

提交作者姓名取自訊息的“From: ”行,提交作者日期取自訊息的“Date: ”行。“Subject: ”行在剝離常見字首“[PATCH <anything>]”後用作提交的標題。“Subject: ”行應該用一行文字簡潔地描述提交內容。

正文開頭的“From: ”、“Date: ”和“Subject: ”行會覆蓋從頭部獲取的相應提交作者姓名和標題值。

提交訊息由從“Subject: ”獲取的標題、一個空行以及訊息正文(直到補丁開始處)組成。每行末尾多餘的空白字元會自動去除。

補丁應該內聯,直接跟在訊息後面。任何以下形式的行:

  • 三個破折號和行尾,或者

  • 以“diff -”開頭的行,或者

  • 以“Index: ”開頭的行

被認為是補丁的開頭,並且提交日誌訊息在此類行的第一次出現之前終止。

初次呼叫 git am 時,您會提供要處理的郵箱名稱。當遇到第一個無法應用的補丁時,它會中途中止。您可以透過以下兩種方式之一恢復:

  1. 透過使用 --skip 選項重新執行命令來跳過當前補丁。

  2. 手動解決工作目錄中的衝突,並更新索引檔案,使其達到補丁應該產生的狀態。然後使用 --continue 選項執行命令。

命令拒絕處理新的郵箱,直到當前操作完成,因此如果您決定從頭開始,請在執行帶有郵箱名稱的命令之前執行 git am --abort

在應用任何補丁之前,ORIG_HEAD 會被設定為當前分支的尖端。如果您在多個提交中遇到問題,例如在錯誤的分支上執行 git am,或者提交中存在透過更改郵箱(例如“From:”行中的錯誤)更容易修復的錯誤,這會很有用。

鉤子

此命令可以執行 applypatch-msgpre-applypatchpost-applypatch 鉤子。有關更多資訊,請參閱 githooks[5]

配置

本節中以下所有內容均從 git-config[1] 文件中選擇性地包含。內容與彼處相同:

am.keepcr

如果為 true,git-am 將呼叫 git-mailsplit 處理 mbox 格式的補丁,並帶上引數 --keep-cr。在這種情況下,git-mailsplit 不會從以 \r\n 結尾的行中移除 \r。可以透過在命令列中給出 --no-keep-cr 來覆蓋此設定。參見 git-am[1], git-mailsplit[1]

am.threeWay

預設情況下,如果補丁不能幹淨地應用,git am 將會失敗。當此設定被設定為 true 時,它會告訴 git am 在補丁記錄了它應該應用到的 blob 的身份且我們在本地有這些 blob 可用時,回退到三方合併(相當於在命令列中給出 --3way 選項)。預設為 false。參見 git-am[1]

GIT

Git[1] 套件的一部分

scroll-to-top