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>)…​

从中读取补丁的邮箱文件列表。 如果您不提供此参数,该命令将从标准输入读取。 如果您提供目录,它们将被视为 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 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 时,您需要指定要处理的邮箱的名称。当看到第一个无法应用的补丁时,它会在中间中止。您可以通过以下两种方式之一恢复:

  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