git am和git apply有什么区别?

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

input和输出都不同:

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

git am使用git apply在幕后应用 ,但是在阅读Maildir或者mbox以及parsing电子邮件之前和之后(创build提交)之前做更多的工作。

git apply于直接git diff (例如,从git diff ),而git am则是用于从电子邮件(无论是mbox还是Maildir格式)应用补丁和补丁序列,并且是git format-patch的“反面”。 git am试图从电子邮件中提取提交消息和作者的详细信息,这就是为什么它可以提交。

使用git am你可以应用这个补丁,所以如果你使用git status你将不会看到任何本地的变化。

git apply可以让你在源代码文件中进行更改,就像你自己编写代码一样,因此git statusgit diff会输出你应用的补丁中所做的更改,然后你可以修改/添加更多的修改并提交他们在一起作为一个新的补丁。