2011-01-07 122 views
72

我沒有看到'git format-patch'和'git diff'的輸出有區別,有沒有?我不能使用'git diff'生成一個補丁,然後使用git apply?'git format-patch和'git diff'有什麼區別?

我的問題是我有更改添加到索引,但顯然git format-patch只接受提交,所以如果我可以使用diff的輸出,那麼我可以使用這個命令來產生一個補丁索引:

git diff --cached > index.patch 

回答

108

git format-patch創建也將包含有關提交一些元信息的補丁(提交者,日期,提交信息,...),幷包含二進制數據的差異。一切都將被格式化爲郵件,以便它可以輕鬆發送。接收到它的人可以用git am重新創建相應的提交,並且所有元數據都將保持不變。它也可以與git apply一起使用,因爲它是一個簡單差異的超集。

git diff一起打補丁將是一個簡單的與上下文的差異(想想diff -u)。它也可以應用於git apply,但元數據不會被重新創建(因爲它們不存在)。

總之,git format-patch對發送提交很有用,而git diff對於得到兩棵樹之間的差異很有用。

8

從手冊git-format-patch準備適合郵件提交的補丁,而git-diff顯示更改。

他們是兩個不同的東西,有不同的目的,他們只是恰好輸出一個補丁格式。但git-format-patch添加了有關提交(日期,作者,提交消息)的數據並將其捆綁爲適合作爲Unix郵件發送的格式(儘管這些只是文件,因此可以將它們發送到其他方法並仍然應用通過git-am)。

另外git-format-patch會爲您指定範圍內的每個提交生成補丁文件。這些更改將以git-am作爲提交添加到您的存儲庫。

git-diff只顯示您要求的兩種狀態之間的差異,可用於創建補丁文件。但這只是一個普通的補丁文件,應用補丁只會改變工作目錄的狀態。

是的,你可以用這種方式爲你的索引創建一個補丁。

+0

謝謝。 UNIX郵件有什麼特別之處,以便他們根據它設計補丁? – Rafid 2011-01-07 09:55:01

相關問題