git am和git apply有什么区别?

Chr*_*oph 124 git patch

双方git amgit apply可以用来应用补丁.我没有看到差异.我现在看到了一个区别:git am自动提交而git apply只触及文件但不创建提交.这是唯一的区别吗?

geo*_*ock 121

输入和输出都不同:

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

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

  • 注意:`git apply`似乎也接受`git format-patch`输出. (6认同)
  • `git apply`也适用于`git format-patch`的输出,但是这些更改将是非分段的,需要提交(因此在它们应用的索引中创建一个不同的提交点).使用`git am`,您将把提交信息(以及作者等)带到它应用的索引中.`git apply`然后用于修补你的回购(坏),`git am`可以进行合法的功能更改并将其包含在你的回购中(首选方法). (6认同)

CB *_*ley 17

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


0x9*_*x90 9

随着git am您应用补丁,如果您使用,git status您将看不到任何本地更改.

git apply使您可以更改在源文件中,如果你是自己编写的代码,因此git statusgit diff将输出在您已经应用,那么你就可以修复/添加更多的变化,并一起提交它们作为一个新的补丁的补丁所做的更改.