2012-10-12 73 views
10

最近我一直在使用git show <hash>來創建差異以供日後參考,因爲它比git diff <hash>~ <hash>更容易輸入,它顯示提交信息(時間戳,用戶,散列,註釋)。然後您可以使用git apply <filename>來應用該修補程序。使用`git show`創建並應用跨多個提交的修補程序

我發現git show -3將顯示最後三個提交以及相同的額外信息。但是,git apply會將其全部壓縮到工作目錄中作爲未分離的更改,並丟失所有提交信息。

git中是否有適用於所有信息的內容?只需傳遞一個標誌就比簡單得多,而不是將補丁分成三個文件,分別應用它們,並創建新的提交。

回答

5

您可以使用git format-patch生成代表提交的MIME電子郵件,包括其元數據(郵件,作者等)。然後您可以使用git am重新應用這些。

因此,git format-patch HEAD~3將爲最後3次提交生成3個補丁,然後您可以將這些補丁全部輸入到git am。如果你想變得更簡單,git format-patch --stdout HEAD~3將在標準輸出上發送MIME消息,所以你可以將它們管到你想要的地方而不是處理3個單獨的文件。

當然,如果您嘗試保存提交以供日後參考,爲何不標記它們?然後您可以使用git cherry-pick重新應用這些提交。

+0

看起來這會工作,但我得去重做我使用'git show'完成的補丁。儘管如此,我可能會從現在開始使用format-patch。 我不只是使用'git cherry-pick'的原因是我正在轉向一個新的開發者服務器,目前基本上只有git的只讀訪問權限。而不是scp所有我的代碼目錄,我只是做補丁複製。 – redbmk

1

嘗試git bundle發送特定的歷史部分。

3

在Linux中,你可以管你三角洲發電機 --- git-showgit-diff,例如---與git-apply命令。

(這也是可能的安全始終啓用3路與-3選項合併)

> git show <sha1> [<path>] | git apply -3 
> git diff <sha1-a> <sha1-b> [<path>] | git apply -3 

例子:

  • 適用於ABCDEF提出了具體文件的編輯:
> git show abcdef dir/file.c | git apply -3 
  • 在兩個不同的提交的文件應用差別ABCDEF

> git diff abcdef 123456 foo.h | git apply -3

參見:https://stackoverflow.com/a/12320940/1329340

相關問題