设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
-
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-commit[1] 中的 signoff 选项。 - -k
- --keep
-
将
-k标志传递给 git mailinfo (参见 git-mailinfo[1])。 - --keep-non-patch
-
将
-b标志传递给 git mailinfo (参见 git-mailinfo[1])。 - --keep-cr
- --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,则回退到 3 向合并。
--no-3way可用于覆盖 am.threeWay 配置变量。有关更多信息,请参见 git-config[1] 中的 am.threeWay。 --rerere-autoupdate--no-rerere-autoupdate-
在 rerere 机制使用记录的冲突解决来更新工作树中的文件后,允许它也用解决结果更新索引。
--no-rerere-autoupdate是一个很好的方式来双重检查rerere所做的操作,并在使用单独的gitadd将结果提交到索引之前,捕获潜在的错误合并。 - --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)]
-
显示
gitam由于冲突而停止的消息。如果指定了raw,则显示原始电子邮件消息内容;如果指定了diff,则只显示 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 会将 mbox 格式的补丁与参数
--keep-cr一起传递给 git-mailsplit。在这种情况下,git-mailsplit 不会从以 \r\n 结尾的行中删除 \r。可以通过在命令行上提供--no-keep-cr来覆盖。参见 git-am[1], git-mailsplit[1]。 - am.threeWay
-
默认情况下,如果补丁无法干净地应用,
gitam将失败。当设置为 true 时,此设置指示gitam在补丁记录了它应该应用的 blob 的标识并且我们本地拥有这些 blob 时,回退到 3 向合并 (相当于从命令行给出--3way选项)。默认为false。参见 git-am[1]。