设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
修补
调试
电子邮件
外部系统
服务器管理员
指南
管理
底层命令
- 2.46.1 → 2.47.0 无更改
- 2.46.0 07/29/24
- 2.45.1 → 2.45.2 无更改
- 2.45.0 04/29/24
- 2.43.1 → 2.44.2 无更改
- 2.43.0 11/20/23
- 2.42.2 → 2.42.3 无更改
- 2.42.1 11/02/23
- 2.41.1 → 2.42.0 无更改
- 2.41.0 06/01/23
- 2.40.1 → 2.40.3 无更改
- 2.40.0 03/12/23
- 2.38.1 → 2.39.5 无更改
- 2.38.0 10/02/22
- 2.35.1 → 2.37.7 无更改
- 2.35.0 01/24/22
- 2.33.2 → 2.34.8 无更改
- 2.33.1 10/12/21
- 2.32.1 → 2.33.0 无更改
- 2.32.0 06/06/21
- 2.31.1 → 2.31.8 无更改
- 2.31.0 03/15/21
- 2.30.1 → 2.30.9 无更改
- 2.30.0 12/27/20
- 2.27.1 → 2.29.3 无更改
- 2.27.0 06/01/20
- 2.26.1 → 2.26.3 无更改
- 2.26.0 03/22/20
- 2.25.1 → 2.25.5 无更改
- 2.25.0 01/13/20
- 2.22.1 → 2.24.4 无更改
- 2.22.0 06/07/19
- 2.17.1 → 2.21.4 无更改
- 2.17.0 04/02/18
- 2.11.4 → 2.16.6 无更改
- 2.10.5 09/22/17
- 2.9.5 07/30/17
- 2.8.6 无更改
- 2.7.6 07/30/17
- 2.6.7 05/05/17
- 2.4.12 → 2.5.6 无更改
- 2.3.10 09/28/15
- 2.2.3 无更改
- 2.1.4 无更改
- 2.0.5 12/17/14
概要
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 可用,则回退到 3 路合并。
--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
,则仅显示 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
-
如果为真,则 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] 套件的一部分