設定與配置
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
-
2.47.0
10/06/24
- 2.43.1 → 2.46.2 無變更
-
2.43.0
11/20/23
- 2.40.1 → 2.42.3 無變更
-
2.40.0
03/12/23
- 2.38.1 → 2.39.5 無變更
-
2.38.0
10/02/22
- 2.35.1 → 2.37.7 無變更
-
2.35.0
01/24/22
- 2.32.1 → 2.34.8 無變更
-
2.32.0
06/06/21
- 2.29.1 → 2.31.8 無變更
-
2.29.0
10/19/20
- 2.19.1 → 2.28.1 無變更
-
2.19.0
09/10/18
- 2.18.1 → 2.18.5 無變更
-
2.18.0
06/21/18
- 2.16.6 → 2.17.6 無變更
-
2.15.4
12/06/19
- 2.14.6 無變更
-
2.13.7
05/22/18
- 2.9.5 → 2.12.5 無變更
-
2.8.6
07/30/17
- 2.5.6 → 2.7.6 無變更
-
2.4.12
05/05/17
-
2.3.10
09/28/15
- 2.1.4 → 2.2.3 無變更
-
2.0.5
12/17/14
概要
git apply [--stat] [--numstat] [--summary] [--check] [--index | --intent-to-add] [--3way] [--ours | --theirs | --union] [--apply] [--no-add] [--build-fake-ancestor=<file>] [-R | --reverse] [--allow-binary-replacement | --binary] [--reject] [-z] [-p<n>] [-C<n>] [--inaccurate-eof] [--recount] [--cached] [--ignore-space-change | --ignore-whitespace] [--whitespace=(nowarn|warn|fix|error|error-all)] [--exclude=<path>] [--include=<path>] [--directory=<root>] [--verbose | --quiet] [--unsafe-paths] [--allow-empty] [<patch>…]
描述
讀取提供的 diff 輸出(即「修補程式」)並將其套用至檔案。從存放庫中的子目錄執行時,會忽略目錄外的已修補路徑。使用 --index
選項時,修補程式也會套用至索引,而使用 --cached
選項時,修補程式只會套用至索引。沒有這些選項時,命令只會將修補程式套用至檔案,且不要求檔案位於 Git 存放庫中。
此命令會套用修補程式,但不會建立 commit。使用 git-am[1] 從 git-format-patch[1] 產生和/或以電子郵件接收的修補程式建立 commit。
選項
- <patch>…
-
要從中讀取修補程式的檔案。- 可用於從標準輸入讀取。
- --stat
-
輸出輸入的 diffstat,而非套用修補程式。關閉「套用」。
- --numstat
-
與
--stat
類似,但會以十進位標記法顯示新增和刪除的行數,以及未縮寫的路徑名稱,使其更適合機器讀取。對於二進位檔案,會輸出兩個-
,而不是說0 0
。關閉「套用」。 - --summary
-
輸出從 git diff 擴充標頭取得的精簡資訊摘要,例如建立、重新命名和模式變更,而非套用修補程式。關閉「套用」。
- --check
-
查看修補程式是否適用於目前的工作樹和/或索引檔,並偵測錯誤,而非套用修補程式。關閉「套用」。
- --index
-
將修補程式套用至索引和工作樹 (或僅檢查是否能乾淨地套用至索引和工作樹,如果
--check
生效的話)。請注意,--index
預期相關路徑的索引項目和工作樹副本相同 (其內容和中繼資料 (例如檔案模式) 必須相符),且如果它們不相符,即使修補程式能乾淨地套用至索引和工作樹 (獨立) 也會引發錯誤。 - --cached
-
只將修補程式套用至索引,而不會更動工作樹。如果
--check
生效,則僅檢查是否能乾淨地套用至索引項目。 - --intent-to-add
-
只將修補程式套用至工作樹時,將新的檔案標記為稍後加入索引 (請參閱 git-add[1] 中的
--intent-to-add
選項)。除非在 Git 存放庫中執行且未指定--index
,否則會忽略此選項。請注意,--index
可以由其他選項 (例如--cached
或--3way
) 隱含。 - -3
- --3way
-
如果修補程式記錄它應套用至的 blob 識別,且我們在本機有這些 blob,則嘗試進行 3 向合併,可能會將衝突標記留在工作樹的檔案中,讓使用者解決。此選項隱含
--index
選項,除非使用--cached
選項,且與--reject
選項不相容。與--cached
選項搭配使用時,任何衝突都會保留在快取中的較高階段。 - --ours
- --theirs
- --union
-
不要將衝突留在檔案中,而是偏好行中的我們 (或他們或兩者) 方來解決衝突。需要 --3way。
- --build-fake-ancestor=<file>
-
較新的 git diff 輸出針對每個 blob 內嵌 索引資訊,以協助識別修補程式套用至的原始版本。提供此旗標時,且如果 blob 的原始版本在本機可用,則會建立包含這些 blob 的暫時索引。
當遇到純模式變更 (沒有索引資訊) 時,會改為從目前索引讀取資訊。
- -R
- --reverse
-
反向套用修補程式。
- --reject
-
為了確保原子性,如果某些程式碼區塊未套用,git apply 預設會使整個修補程式失敗,且不會更動工作樹。此選項會使其套用適用的修補程式部分,並將拒絕的程式碼區塊保留在對應的 *.rej 檔案中。
- -z
-
當提供
--numstat
時,不要修改路徑名稱,而是使用以 NUL 結尾的機器可讀格式。如果沒有此選項,則會如配置變數
core.quotePath
所述 (請參閱 git-config[1]),以引號括住包含「不尋常」字元的路徑名稱。 - -p<n>
-
從傳統 diff 路徑中移除 <n> 個開頭路徑元件 (以斜線分隔)。例如,使用
-p2
時,針對a/dir/file
的修補程式會直接套用至file
。預設值為 1。 - -C<n>
-
確保每個變更前後至少符合 <n> 行周圍的內容。如果周圍的內容行較少,則必須全部相符。預設情況下,永遠不會忽略任何內容。
- --unidiff-zero
-
預設情況下,git apply 預期要套用的修補程式是統一 diff,且至少有一行內容。這會提供良好的安全措施,但在套用以
--unified=0
產生的 diff 時會失效。若要略過這些檢查,請使用--unidiff-zero
。請注意,基於上述原因,不建議使用無內容修補程式。
- --apply
-
如果您使用上述任何標示為「關閉 apply」的選項,則 git apply 會讀取並輸出要求的資訊,而不會實際套用修補程式。在這些旗標之後提供此旗標,也會套用修補程式。
- --no-add
-
套用修補程式時,忽略修補程式所做的加入。這可用於透過先執行它們的 diff,然後使用此選項套用結果來擷取兩個檔案之間的共用部分,這會套用刪除部分,但不會套用加入部分。
- --allow-binary-replacement
- --binary
-
過去,我們不允許在未經使用者明確許可的情況下套用二進位修補程式,而此旗標是執行此操作的方式。目前,我們一律允許套用二進位修補程式,因此這是無作業。
- --exclude=<path-pattern>
-
不要將變更套用至符合指定路徑模式的檔案。在匯入修補程式集時,如果您想要排除某些檔案或目錄,這會很有用。
- --include=<path-pattern>
-
將變更套用至符合指定路徑模式的檔案。在匯入修補程式集時,如果您想要包含某些檔案或目錄,這會很有用。
使用
--exclude
和--include
模式時,會依它們在命令列中出現的順序檢查它們,且第一個符合的模式會決定是否使用每個路徑的修補程式。如果命令列上沒有包含模式,則預設會使用不符合任何包含/排除模式的路徑修補程式,如果有任何包含模式,則會忽略它。 - --ignore-space-change
- --ignore-whitespace
-
套用修補程式時,如果需要,則會忽略內容行中的空格變更。內容行將保留其空格,且無論
--whitespace
選項的值為何,都不會進行空格修正。不過,仍會修正新行。 - --whitespace=<action>
-
套用修補程式時,偵測有空格錯誤的新行或修改過的行。哪些被視為空格錯誤是由
core.whitespace
配置控制。預設情況下,結尾空格 (包括僅由空格組成的行) 和緊接在行初始縮排內的 Tab 字元之前的空格字元會被視為空格錯誤。預設情況下,命令會輸出警告訊息,但會套用修補程式。當
git-apply
用於統計資料而不是套用修補程式時,它預設為nowarn
。您可以使用不同的
<action>
值來控制此行為-
nowarn
關閉尾隨空白警告。 -
warn
針對少數此類錯誤輸出警告,但會直接套用修補程式(預設)。 -
fix
針對少數此類錯誤輸出警告,並在修正後套用修補程式(strip
是同義詞——該工具過去僅將尾隨空白字元視為錯誤,而修復方法涉及 *strip* 它們,但現代 Git 會做更多處理)。 -
error
針對少數此類錯誤輸出警告,並拒絕套用修補程式。 -
error-all
與error
類似,但會顯示所有錯誤。
-
- --inaccurate-eof
-
在某些情況下,某些版本的 diff 無法正確偵測到檔案末尾缺少換行符號。 因此,此類 diff 程式建立的修補程式無法正確記錄不完整的行。 此選項透過解決此錯誤,增加了對套用此類修補程式的支援。
- -v
- --verbose
-
向 stderr 回報進度。 預設情況下,僅會印出關於目前正在套用的修補程式的訊息。 此選項將會回報額外資訊。
- -q
- --quiet
-
抑制 stderr 輸出。 將不會印出關於修補程式狀態和進度的訊息。
- --recount
-
不要信任 hunk 標頭中的行數計數,而是透過檢查修補程式來推斷它們(例如,在編輯修補程式而未適當調整 hunk 標頭之後)。
- --directory=<root>
-
在所有檔案名稱前加上 <root>。 如果也傳遞了 "-p" 引數,則會在加上新根目錄之前套用。
例如,一個關於將
a/git-gui.sh
更新為b/git-gui.sh
的修補程式,可以透過執行git apply --directory=modules/git-gui
,套用至工作樹中的檔案modules/git-gui/git-gui.sh
。 - --unsafe-paths
-
預設情況下,影響工作區域外部(Git 控制的工作樹,或當 "git apply" 用作 GNU patch 的替代品時的當前工作目錄)的修補程式,會被視為錯誤(或惡作劇)而拒絕。
當
git apply
用作「更好的 GNU patch」時,使用者可以傳遞--unsafe-paths
選項來覆寫此安全檢查。 當使用--index
或--cached
時,此選項無效。 - --allow-empty
-
對於不包含 diff 的修補程式,不要傳回錯誤。 這包括空修補程式和僅包含提交文字的修補程式。
組態設定
本節中此行以下的所有內容都是從 git-config[1] 文件中選擇性包含的。 內容與該處找到的相同
- apply.ignoreWhitespace
-
當設定為 change 時,會告知 git apply 忽略空白中的變更,方式與
--ignore-space-change
選項相同。 當設定為以下其中一項時:no、none、never、false,它會告知 git apply 尊重所有空白差異。 請參閱 git-apply[1]。 - apply.whitespace
-
告知 git apply 如何處理空白,方式與
--whitespace
選項相同。 請參閱 git-apply[1]。
子模組
如果修補程式包含對子模組的任何變更,則 git apply 會按如下方式處理這些變更。
如果指定了 --index
(明確或隱含),則子模組的提交必須與索引完全匹配,才能套用修補程式。 如果任何子模組被檢出,則會完全忽略這些檢出,即它們不需要是最新的或乾淨的,並且不會更新。
如果未指定 --index
,則會忽略修補程式中的子模組提交,並且僅檢查和(如果可能)更新相應子目錄的有無。
GIT
屬於 git[1] 套件的一部分