2012-09-02 650 views
85

兩個git amgit apply可用於應用補丁。我看不出有什麼不同。我現在看到一個區別:git am自動提交,而git apply只觸及文件但不創建提交。這是唯一的區別嗎?git am和git apply有什麼區別?

+7

'am'可以作爲'應用Mail' ...... –

回答

74

兩者的輸入和輸出是不同的:

  • git apply需要補丁(例如的git diff的輸出),並將其應用到工作目錄(或索引,如果--index--cached被使用)。
  • git am需要格式化爲電子郵件消息提交的郵箱(例如的git format-patch的輸出),並將它們應用到當前分支。

git am uses git apply behind the scenes,但確實(讀Maildirmbox,和解析電子郵件)前(創建提交)後,更多的工作。

+5

注意的縮寫被認爲是:'混帳apply'似乎也接受'git的格式patch'輸出。 –

+3

'GIT中apply'將用於從'git的格式patch'輸出工作,以及,但這些變化將是不分階段和將需要被提交(從而產生不同的在它們被應用於索引提交點)。使用'git am',您可以將提交信息(以及作者等)帶入應用到的索引中。然後 '混帳apply'是修補您的回購協議(壞),'混帳am'可以採取合法的特徵變化,包括到您的回購協議(首選方法)。 –

6

隨着git am應用修補程序,所以如果你使用git status你不會看到任何地方的變化。

git apply使您可以更改源文件,如果你自己你已經應用,那麼你就可以修復/添加更多的改變編寫代碼,因此git statusgit diff將輸出在補丁所做的更改,將它們作爲一個新補丁提交。

9

git apply是用於施加直diff文件(例如,從git diff),而git am是用於從電子郵件應用補丁和補丁的序列,這可MBOX或Maildir的格式,它是的git format-patch「相反」。 git am嘗試從電子郵件中提取提交消息和作者詳細信息,這就是爲什麼它可以進行提交。

相關問題