tag 為特定的提交生成一個git補丁



git tag時間 (7)

我需要編寫一個腳本來為SHA1提交編號列表創建補丁。

我嘗試使用git format-patch <the SHA1> ,但是自從那個SHA1以來,每次提交都會生成一個補丁。 在生成了幾百個補丁後,我不得不殺死這個進程。

有沒有辦法為特定的SHA1生成補丁?


Answer #1

假設您在提交1後提交了id 2,您將能夠運行:

git diff 2 1 > mypatch.diff

其中2和1是SHA哈希值。


Answer #2

從特定提交(而不是最後一次提交)生成路徑:

git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE

Answer #3

如果你想確保(單一提交)補丁將被應用在特定的提交之上,你可以使用新的git 2.9(2016年6月)選項git format-patch --base

git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE

參見小葉 爺(``)的 提交bb52995提交3de6651提交fa2ab86提交ded2c09 (2016年4月26日
(合併Junio C gitster - gitster - 承諾72ce3ff ,2016年5月23日)

format-patch :添加' --base '選項來記錄基礎樹信息

維護人員或第三方測試人員可能想知道該補丁系列適用的確切基準樹。 教學git格式 - 修補' --base '選項以記錄基礎樹信息並將其追加到第一條消息的末尾(封面信或系列中的第一個補丁)。

基礎樹信息由“基本提交”組成,這是一個眾所周知的提交,它是項目歷史中穩定部分的一部分,每個人都可以使用它,零個或多個“先決條件補丁”是眾所周知的在應用修補程序之前,尚未按照拓撲順序在“基礎提交”之上應用“基本提交”的一部分的飛行中的修補程序。

“基本提交”顯示為“ base-commit: ”,後面跟著提交對象名稱的40十六進制。
“先決條件修補程序”顯示為“ prerequisite-patch-id: ”,後跟40位十六進制“修補程序ID”,可通過將修補程序通過“ git patch-id --stable ”命令獲取。


Answer #4
git format-patch commit_Id~1..commit_Id  
git apply patch-file-name

快速簡單的解決方案。


Answer #5

嘗試:

git format-patch -1 <sha>

要么

git format-patch -1 HEAD

使用以下命令應用修補程序:

patch -p1 < file.patch

Answer #6

這個命令(正如@ Naftuli Tzvi Kay所建議的那樣 ):

git format-patch -1 HEAD

用特定的散列或範圍替換HEAD

將生成格式化為類似於UNIX郵箱格式的最新提交的修補程序文件。

-<n> - 從最上面的提交中準備補丁。

然後您可以通過以下郵箱格式重新應用修補程序文件:

git am -3k 001*.patch

請參閱: man git-format-patch


Answer #7

生成僅用於特定SHA1的補丁的方法是什麼?

這很簡單:

選項1. git show commitID > myFile.patch

選項2. git commitID~1..commitID > myFile.patch

注意:用實際提交ID(SHA1提交代碼)替換commitID





patch