git am和git apply都可以用于应用补丁。我看不出有什么区别。我现在看到了不同:git am自动提交,而git apply只处理文件,但不创建提交。这是唯一的区别吗?
git am
git apply
ifmq2ha21#
输入和输出是不同的:
git diff
--index
--cached
git format-patch
git am在幕后使用git apply,但在之前(阅读Maildir或mbox,并解析电子邮件)和之后(创建提交)做更多的工作。
Maildir
mbox
dddzy1tm2#
git apply用于应用直线差(例如来自git diff),而git am用于应用来自mbox或Maildir格式的电子邮件的补丁和补丁序列,并且是git format-patch的“相反”。git am尝试从电子邮件中提取提交消息和作者详细信息,这就是它可以提交的原因。
xuo3flqw3#
使用git am应用补丁,所以当您运行git status时,您不会看到任何本地更改,但git log将显示补丁已提交到源代码。但是使用git apply,您在源文件中进行更改,就像您自己编写代码一样,因此git status和git diff将输出您应用的补丁中出现的更改。因此,使用git apply,您可以修复/添加更多更改,并将git add作为一个新的补丁。
git status
git log
git add
3条答案
按热度按时间ifmq2ha21#
输入和输出是不同的:
git apply
采用补丁(例如git diff
的输出),并将其应用于工作目录(或索引,如果使用--index
或--cached
)。git am
将提交的邮箱格式化为电子邮件消息(例如,git format-patch
的输出)并将它们应用于当前分支。git am
在幕后使用git apply
,但在之前(阅读Maildir
或mbox
,并解析电子邮件)和之后(创建提交)做更多的工作。dddzy1tm2#
git apply
用于应用直线差(例如来自git diff
),而git am
用于应用来自mbox或Maildir格式的电子邮件的补丁和补丁序列,并且是git format-patch
的“相反”。git am
尝试从电子邮件中提取提交消息和作者详细信息,这就是它可以提交的原因。xuo3flqw3#
使用
git am
应用补丁,所以当您运行git status
时,您不会看到任何本地更改,但git log
将显示补丁已提交到源代码。但是使用
git apply
,您在源文件中进行更改,就像您自己编写代码一样,因此git status
和git diff
将输出您应用的补丁中出现的更改。因此,使用git apply
,您可以修复/添加更多更改,并将git add
作为一个新的补丁。