设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
-
2.54.0
2026-04-20
-
2.53.0
2026-02-02
-
2.52.0
2025-11-17
- 2.50.1 → 2.51.2 无更改
-
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-interpret-trailers[1]),使用您自己的提交者身份。有关更多信息,请参阅 git-commit[1] 中的 signoff 选项。 - -k
- --keep
-
将
-k标志传递给 git-mailinfo[1]。 - --keep-non-patch
-
将
-b标志传递给 git-mailinfo[1]。 - --keep-cr
- --no-keep-cr
-
使用
--keep-cr时,调用 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[1]。
- --empty=(drop|keep|stop)
-
如何处理缺少补丁的电子邮件
- -m
- --message-id
-
将
-m标志传递给 git-mailinfo[1],以便将Message-ID头部添加到提交消息中。配置变量am.messageid可用于指定默认行为。 - --no-message-id
-
不要将 Message-ID 头部添加到提交消息中。
--no-message-id可用于覆盖am.messageid。 - -q
- --quiet
-
静默模式。仅打印错误消息。
- -u
- --utf8
-
将
-u标志传递给 git-mailinfo[1]。从电子邮件获取的建议提交日志消息将被重新编码为 UTF-8 编码(如果项目首选编码不是 UTF-8,可以使用配置变量i18n.commitEncoding指定)。这在以前版本的 git 中是可选的,但现在是默认行为。您可以使用
--no-utf8来覆盖此设置。 - --no-utf8
-
将
-n标志传递给 git-mailinfo[1]。 - -3
- --3way
- --no-3way
-
当补丁不能干净地应用时,如果补丁记录了它应该应用的 blob 的标识,并且我们在本地拥有这些 blob,则回退到 3-way 合并。
--no-3way可用于覆盖 am.threeWay 配置变量。有关更多信息,请参阅 git-config[1] 中的 am.threeWay。 --rerere-autoupdate--no-rerere-autoupdate-
在 rerere 机制对当前冲突重用已记录的解决方案以更新工作区中的文件后,允许它同时使用解决方案的结果更新索引。
--no-rerere-autoupdate是在将结果提交到索引之前,通过单独的 git-add[1] 仔细检查 git-rerere[1] 所做操作并捕获潜在错误合并的好方法。 - --ignore-space-change
- --ignore-whitespace
- --whitespace=<action>
- -C<n>
- -p<n>
- --directory=<dir>
- --exclude=<path>
- --include=<path>
- --reject
-
这些标志被传递给应用补丁的 git-apply[1] 程序。
--whitespace选项的有效 <action> 为:nowarn,warn,fix,error, 和error-all。 - --patch-format
-
默认情况下,命令会尝试自动检测补丁格式。此选项允许用户跳过自动检测并指定补丁应被解释为的格式。有效格式包括 mbox, mboxrd, stgit, stgit-series, 和 hg。
- -i
- --interactive
-
以交互方式运行。
- --verify
- -n
- --no-verify
-
运行
pre-applypatch和applypatch-msg钩子。这是默认设置。使用-n或--no-verify跳过这些钩子。另请参阅 githooks[5]。请注意,
post-applypatch无法跳过。 - --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[1] 和 git-am[1] 内部使用。 - --abort
-
恢复原始分支并中止补丁操作。将 am 操作涉及的文件内容恢复到 am 之前的状态。
- --quit
-
中止补丁操作,但保持 HEAD 和索引不受影响。
- --retry
-
尝试再次应用上一个冲突的补丁。这通常仅在向重试尝试传递额外选项(例如
--3way)时有用,否则您只会再次看到相同的失败。 - --show-current-patch[=(diff|raw)]
-
显示 git-am[1] 因冲突而停止时的消息。如果指定了
raw,则显示电子邮件的原始内容;如果为diff,则仅显示 diff 部分。默认为raw。 - --allow-empty
-
在对缺少补丁的输入电子邮件补丁失败后,创建一个内容为电子邮件消息的空提交。
讨论
提交作者姓名取自消息的“From: ”行,提交作者日期取自消息的“Date: ”行。“Subject: ”行在剥离常见前缀“[PATCH <anything>]”后用作提交标题。“Subject: ”行旨在用一行文字简洁地描述提交内容。
正文开头的“From: ”、“Date: ”和“Subject: ”行将覆盖从标头中获取的各自的提交作者姓名和标题值。
提交消息由取自“Subject: ”的标题、一个空行以及直到补丁开始前的消息正文组成。每行末尾的多余空白字符会自动剥离。
补丁应为内联,直接跟在消息后面。任何以下形式的行
-
三个短横线和行尾,或者
-
以 "diff -" 开头的行,或者
-
以 "Index: " 开头的行
的行都被视为补丁的开始,并且提交日志信息会在第一次出现此类行之前终止。
这意味着提交消息的内容可能会无意中中断处理(请参阅下文的 注意事项 部分)。
最初调用 git-am[1] 时,您需要指定要处理的邮箱名称。在看到第一个无法应用的补丁时,它会中途中止。您可以通过以下两种方式之一进行恢复
-
通过使用
--skip选项重新运行命令来跳过当前补丁。 -
在工作目录中手动解决冲突,并更新索引文件以使其达到补丁本应产生的状态。然后使用
--continue选项运行命令。
在当前操作完成之前,该命令拒绝处理新的邮箱,因此如果您决定从头开始,请在运行带有邮箱名称的命令之前运行 git am --abort。
在应用任何补丁之前,ORIG_HEAD 会被设置为当前分支的末端。如果您在多个提交时遇到问题(例如在错误的分支上运行 git-am[1],或者提交中的错误可以通过更改邮箱更容易地修复,如“From:”行中的错误),这非常有用。
注意事项
git-format-patch[1] 的输出在通过 git-am[1] 应用时可能会导致不同的提交消息。所应用的补丁也可能与生成的补丁不同,或者补丁应用可能会直接失败。有关语法规则,请参阅上面的 讨论 部分。
请注意,这对于提交信息中出现的未缩进 diff 尤其成问题;提交信息中的 diff 可能会与补丁部分一起被应用,或者补丁应用机制可能会因为补丁目标无法应用而绊倒。这例如可能是由 Markdown 代码块中的 diff 引起的。
解决此问题的办法是缩进 diff 或可能引起问题的其他文本。
如果您直接从邮箱应用补丁,这种保真度损失可能很容易察觉。然而,源自 Git 的更改可以批量应用,在这种情况下,这将很难察觉。这例如可以是一个使用补丁文件在来自上游仓库的提交之上应用更改的 Linux 发行版。这表明此行为不仅影响电子邮件工作流。
鉴于这些限制,人们可能会倾向于改用像 patch(1) 这样的通用实用程序。然而,patch(1) 不仅会查找未缩进的 diff(如 git-am[1]),还会尝试应用缩进的 diff。
钩子
此命令可以运行 applypatch-msg, pre-applypatch, 和 post-applypatch 钩子。有关更多信息,请参阅 githooks[5]。
请参阅 --verify/-n/--no-verify 选项。
配置
本节中以下所有内容均从 git-config[1] 文档中选择性地包含。内容与彼处相同:
- am.keepcr
-
如果为 true,git-am[1] 将为 mbox 格式的补丁调用带
--keep-cr参数的 git-mailsplit[1]。在这种情况下,git-mailsplit[1] 不会从以 \r\n 结尾的行中删除 \r。可以通过在命令行上给出--no-keep-cr来覆盖。 - am.threeWay
-
默认情况下,如果补丁不能干净地应用,git-am[1] 将失败。设置为 true 时,此设置告诉 git-am[1] 如果补丁记录了它应该应用的 blob 的标识,并且我们在本地拥有这些 blob,则回退到 3-way 合并(相当于从命令行给出
--3way选项)。默认为false。 - am.messageId
-
在使用 git-am[1] 时,根据电子邮件头部添加一个
Message-ID追踪信息到提交(参见 git-interpret-trailers[1])。另请参阅--message-id和--no-message-id选项。