【问题标题】:What is the difference between git am and git apply?git am 和 git apply 有什么区别?
【发布时间】:2012-08-27 17:39:53
【问题描述】:

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

【问题讨论】:

  • am 可以认为是Apply Mail的缩写...

标签: git patch


【解决方案1】:

输入和输出都不一样:

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

git am uses git apply behind the scenes,但在之前(读取Maildirmbox,并解析电子邮件)和之后(创建提交)做了更多的工作。

【讨论】:

  • 注意:git apply 似乎也接受git format-patch 输出。
  • git apply 也适用于来自git format-patch 的输出,但更改将是非暂存的,需要提交(因此在它们应用到的索引中创建不同的提交点)。使用git am,您会将提交信息(连同作者等)携带到它所应用的索引中。 git apply 然后用于修补您的回购(不好),git am 可以进行合法的功能更改并将其包含到您的回购中(首选方法)。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-06
      • 2023-02-09
      • 2013-02-23
      • 2011-03-22
      • 2011-04-08
      • 2011-02-14
      • 2015-01-17
      相关资源
      最近更新 更多