Git
English ▾ 主題 ▾ 最新版本 ▾ git-am 最後更新於 2.46.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>)…​

要從中讀取修補程式的郵件箱檔案清單。如果您不提供此參數,命令會從標準輸入讀取。如果您提供目錄,它們將被視為 Maildirs。

-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 將針對 mbox 格式的修補程式呼叫 git-mailsplit 並帶有參數 --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 可用,則會回退到 3 向合併(相當於從命令列給定 --3way 選項)。預設為 false。請參閱 git-am[1]

另請參閱

GIT

屬於 git[1] 套件的一部分

scroll-to-top