git am
和git apply
都可用于应用补丁。我没有看到差异。我现在看到了一个区别:git am
自动提交,而git apply
只触及文件但不创建提交。这是唯一的区别吗?
答案 0 :(得分:109)
输入和输出都不同:
git apply
获取补丁(例如git diff
的输出)并将其应用于工作目录(或索引,如果使用--index
或--cached
。)< / LI>
git am
将格式化为电子邮件的提交邮箱(例如git format-patch
的输出)并将其应用于当前分支。 git am
uses git apply
behind the scenes,但之前做更多工作(阅读Maildir
或mbox
,解析电子邮件)和之后(创建提交)。
答案 1 :(得分:15)
git apply
用于应用直接差异(例如来自git diff
),而git am
用于应用来自电子邮件的补丁和补丁序列,mbox或Maildir格式,并且是“对立” git format-patch
。 git am
尝试从电子邮件消息中提取提交消息和作者详细信息,这就是它可以进行提交的原因。
答案 2 :(得分:8)
使用git am
您应用修补程序,因此如果您使用git status
,则不会看到任何本地更改。
git apply
使您可以在源文件中进行更改,就像您自己编写代码一样,因此git status
和git diff
将输出您在补丁中所做的更改应用,然后您可以修复/添加更多更改并将它们作为一个新补丁一起提交。