git am和git apply有什么区别?


134

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


11
am可以看作是Apply Mail... 的缩写
Philip Oakley 2012年

Answers:


144

输入和输出都不同:

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

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


6
注意:git apply似乎也接受git format-patch输出。
西罗Santilli郝海东冠状病六四事件法轮功

7
git apply也可以从中获取输出,git format-patch但是更改将是未分级的,并且需要提交(因此,在要应用的索引中创建不同的提交点)。与git am您一起会将提交信息(以及作者等)带入它所应用的索引中。git apply然后用于修补您的存储库(不良),git am可以进行合法的功能更改并将其包含在您的存储库中(首选方法)。
Prasoon Joshi's

18

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


9

随着git am应用修补程序,所以如果你使用git status,你不会看到任何地方的变化。

git apply这样一来,您就可以像在自己编写代码一样对源文件进行更改,git statusgit diff输出在已应用的补丁程序中所做的更改,然后您可以修复/添加更多更改并将它们作为一个新的补丁程序一起提交。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.