git am 和 git apply 有啥区别?
Posted
技术标签:
【中文标题】git am 和 git apply 有啥区别?【英文标题】:What is the difference between git am and git apply?git am 和 git apply 有什么区别? 【发布时间】:2012-08-27 17:39:53 【问题描述】:git am
和 git apply
都可用于应用补丁。我看不出有什么区别。我现在看到了不同之处:git am
自动提交,而 git apply
只涉及文件但不创建提交。这是唯一的区别吗?
【问题讨论】:
am
可以认为是Apply Mail
的缩写...
【参考方案1】:
输入和输出都不一样:
git apply
获取一个补丁(例如git diff
的输出)并将其应用到工作目录(或索引,如果使用了--index
或--cached
)。
git am
采用格式为电子邮件的提交邮箱(例如 git format-patch
的输出)并将它们应用于当前分支。
git am
uses git apply
behind the scenes,但在之前(读取Maildir
或mbox
,并解析电子邮件)和之后(创建提交)做了更多的工作。
【讨论】:
注意: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 status
和git diff
将输出您应用的补丁中出现的更改。因此,使用git apply
,您可以修复/添加更多更改并将git add
它们一起作为一个新补丁。
【讨论】:
以上是关于git am 和 git apply 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
不能将 `git mergetool` 与 `git am` 或 `git apply` 或 `patch` 一起使用
git命令之git stash apply和 pop 的区别