176

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

4

3 回答 3

192

输入和输出都不一样:

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

git amgit apply在幕后使用,但在之前(读取Maildirormbox和解析电子邮件)和之后(创建提交)做更多的工作。

于 2012-09-02T22:23:10.293 回答
25

git apply用于应用直接差异(例如 from git diff),而git am用于从电子邮件应用补丁和补丁序列,mbox 或 Maildir 格式,并且是git format-patch. git am尝试从电子邮件中提取提交消息和作者详细信息,这就是它可以进行提交的原因。

于 2012-09-02T22:21:01.753 回答
15

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

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

于 2012-09-02T22:20:31.413 回答