Git am 和 git application 之间的区别是什么?

git amgit apply都可以用来应用补丁。我看不出有什么区别。我现在看到了一个区别: git am自动提交,而 git apply只触及文件,但不创建提交。这是唯一的区别吗?

105216 次浏览

使用 git am时,您应用了补丁,因此当您运行 git status时,您不会看到任何本地更改,但是 git log将显示补丁已提交给源代码。

但是对于 git apply,您可以在源文件中进行更改,就像您自己编写代码一样,因此 git statusgit diff将输出您应用的补丁中出现的更改。因此,使用 git apply,您可以修复/添加更多的更改和 git add作为一个单一的新补丁他们在一起。

git apply是应用直差(例如从 git diff) ,而 git am是应用补丁和补丁序列从电子邮件,无论是 mbox 或 Maildir 格式,是“相反”的 git format-patchgit am尝试从电子邮件中提取提交消息和作者详细信息,这就是为什么它可以进行提交。

输入和输出都是不同的:

  • git apply 接收一个补丁(例如 git diff的输出)并将其应用于工作目录(或索引,如果使用 --index--cached)。
  • git am 接受一个格式为电子邮件消息的提交邮箱(例如 git format-patch的输出) ,并将它们应用到当前分支。

git am在后台使用 git apply ,但在前面(阅读 Maildirmbox,解析电子邮件消息)和后面(创建提交)做更多的工作。