設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.50.1 無更改
-
2.50.0
2025-06-16
- 2.46.1 → 2.49.1 無變更
-
2.46.0
2024-07-29
- 2.45.1 → 2.45.4 無更改
-
2.45.0
2024-04-29
- 2.43.1 → 2.44.4 無更改
-
2.43.0
2023-11-20
- 2.42.2 → 2.42.4 無更改
-
2.42.1
2023-11-02
- 2.41.1 → 2.42.0 無變更
-
2.41.0
2023-06-01
- 2.40.1 → 2.40.4 無更改
-
2.40.0
2023-03-12
- 2.38.1 → 2.39.5 無更改
-
2.38.0
2022-10-02
- 2.35.1 → 2.37.7 無更改
-
2.35.0
2022-01-24
- 2.33.2 → 2.34.8 無變更
-
2.33.1
2021-10-12
- 2.32.1 → 2.33.0 無更改
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 無更改
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 無更改
-
2.30.0
2020-12-27
- 2.27.1 → 2.29.3 無更改
-
2.27.0
2020-06-01
- 2.26.1 → 2.26.3 無更改
-
2.26.0
2020-03-22
- 2.25.1 → 2.25.5 無更改
-
2.25.0
2020-01-13
- 2.22.1 → 2.24.4 無更改
-
2.22.0
2019-06-07
- 2.17.1 → 2.21.4 無變更
-
2.17.0
2018-04-02
- 2.11.4 → 2.16.6 無變更
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
- 2.8.6 無更改
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
- 2.4.12 → 2.5.6 無更改
-
2.3.10
2015-09-28
- 2.2.3 無變更
- 2.1.4 無更改
-
2.0.5
2014-12-17
概要
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)
-
如何處理缺少補丁的電子郵件訊息
- -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> 有:nowarn
、warn
、fix
、error
和error-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 rebase 和 git 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
時,您會提供要處理的郵箱名稱。當遇到第一個無法應用的補丁時,它會中途中止。您可以透過以下兩種方式之一恢復:
-
透過使用
--skip
選項重新執行命令來跳過當前補丁。 -
手動解決工作目錄中的衝突,並更新索引檔案,使其達到補丁應該產生的狀態。然後使用
--continue
選項執行命令。
命令拒絕處理新的郵箱,直到當前操作完成,因此如果您決定從頭開始,請在執行帶有郵箱名稱的命令之前執行 git
am
--abort
。
在應用任何補丁之前,ORIG_HEAD 會被設定為當前分支的尖端。如果您在多個提交中遇到問題,例如在錯誤的分支上執行 git am,或者提交中存在透過更改郵箱(例如“From:”行中的錯誤)更容易修復的錯誤,這會很有用。
鉤子
此命令可以執行 applypatch-msg
、pre-applypatch
和 post-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]。