設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.47.1 → 2.50.1 無更改
-
2.47.0
2024-10-06
- 2.43.1 → 2.46.4 無變更
-
2.43.0
2023-11-20
- 2.40.1 → 2.42.4 無更改
-
2.40.0
2023-03-12
- 2.38.1 → 2.39.5 無更改
-
2.38.0
2022-10-02
- 2.35.1 → 2.37.7 無更改
-
2.35.0
2022-01-24
- 2.32.1 → 2.34.8 無更改
-
2.32.0
2021-06-06
- 2.29.1 → 2.31.8 無變更
-
2.29.0
2020-10-19
- 2.19.1 → 2.28.1 無變更
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 無更改
-
2.18.0
2018-06-21
- 2.16.6 → 2.17.6 無更改
-
2.15.4
2019-12-06
- 2.14.6 無更改
-
2.13.7
2018-05-22
- 2.9.5 → 2.12.5 無變更
-
2.8.6
2017-07-30
- 2.5.6 → 2.7.6 無變更
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 無更改
-
2.0.5
2014-12-17
概要
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 倉庫中。
此命令應用補丁,但不會建立提交。使用 git-am[1] 從 git-format-patch[1] 生成的或透過電子郵件接收的補丁建立提交。
選項
- <補丁>…
-
讀取補丁的檔案。可以使用 * -* 從標準輸入讀取。
- --stat
-
不應用補丁,而是輸出輸入的 diff 統計。關閉“應用”功能。
- --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,則嘗試三方合併,可能會在工作樹中的檔案中留下衝突標記供使用者解決。除非使用了
--cached
選項,否則此選項隱含--index
選項,並且與--reject
選項不相容。當與--cached
選項一起使用時,所有衝突都保留在快取的更高階段。 - --ours
- --theirs
- --union
-
不在檔案中保留衝突,而是解決衝突,偏向我們(或他們或兩者)的行。需要 --3way。
- --build-fake-ancestor=<檔案>
-
較新的 *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> 行周圍上下文匹配。如果周圍上下文行數少於 <n>,則所有行都必須匹配。預設情況下,不會忽略任何上下文。
- --unidiff-zero
-
預設情況下,*git apply* 要求所應用的補丁是至少包含一行上下文的統一 diff。這提供了良好的安全措施,但在應用使用
--unified=0
生成的 diff 時會失效。要繞過這些檢查,請使用--unidiff-zero
。注意,由於上述原因,不鼓勵使用無上下文補丁。
- --apply
-
如果您使用上面標記為“關閉 *apply*”的任何選項,*git apply* 將讀取並輸出所請求的資訊,而不會實際應用補丁。在這些標誌之後指定此標誌,以同時應用補丁。
- --no-add
-
應用補丁時,忽略補丁所做的新增。這可以用於透過首先對兩個檔案執行 *diff*,然後使用此選項應用結果來提取兩個檔案之間的公共部分,這將應用刪除部分而非新增部分。
- --allow-binary-replacement
- --binary
-
歷史上,未經使用者明確許可,我們不允許應用二進位制補丁,此標誌是為此目的而設。目前,我們始終允許應用二進位制補丁,因此此標誌是空操作。
- --exclude=<路徑模式>
-
不將更改應用於匹配給定路徑模式的檔案。這在匯入補丁集時很有用,當您想排除某些檔案或目錄時。
- --include=<路徑模式>
-
將更改應用於匹配給定路徑模式的檔案。這在匯入補丁集時很有用,當您想包含某些檔案或目錄時。
當使用
--exclude
和--include
模式時,它們將按照在命令列中出現的順序進行檢查,並且第一個匹配項決定是否使用針對每個路徑的補丁。如果命令列上沒有包含模式,則預設使用不匹配任何包含/排除模式的路徑的補丁;如果存在任何包含模式,則忽略該補丁。 - --ignore-space-change
- --ignore-whitespace
-
應用補丁時,如果需要,忽略上下文行中空白符的更改。上下文行將保留其空白符,並且無論
--whitespace
選項的值如何,它們都不會進行空白符修復。但是,新行仍將被修復。 - --whitespace=<操作>
-
應用補丁時,檢測存在空白符錯誤的新行或修改行。哪些被認為是空白符錯誤由
core.whitespace
配置控制。預設情況下,行尾空白符(包括僅由空白符組成的行)以及行初始縮排中緊跟製表符的空格字元被視為空白符錯誤。預設情況下,該命令會輸出警告訊息但應用補丁。當
git-apply
用於統計而不應用補丁時,它預設為nowarn
。您可以使用不同的 <操作> 值來控制此行為
-
nowarn
關閉尾隨空白符警告。 -
warn
為少數此類錯誤輸出警告,但原樣應用補丁(預設)。 -
fix
為少數此類錯誤輸出警告,並在修復後應用補丁(strip
是同義詞 — 該工具過去只將尾隨空白符視為錯誤,修復涉及 *刪除* 它們,但現代 Git 做了更多)。 -
error
為少數此類錯誤輸出警告,並拒絕應用補丁。 -
error-all
類似於error
,但顯示所有錯誤。
-
- --inaccurate-eof
-
在某些情況下,某些版本的 *diff* 未能正確檢測檔案末尾缺失的新行。因此,由這些 *diff* 程式建立的補丁未能正確記錄不完整的行。此選項透過解決此錯誤來支援應用此類補丁。
- -v
- --verbose
-
向標準錯誤輸出報告進度。預設情況下,只打印當前正在應用的補丁的訊息。此選項將導致報告額外資訊。
- -q
- --quiet
-
抑制標準錯誤輸出。不會列印有關補丁狀態和進度的訊息。
- --recount
-
不信任程式碼塊頭部中的行數,而是透過檢查補丁來推斷它們(例如,在編輯補丁後未適當調整程式碼塊頭部)。
- --directory=<根目錄>
-
將 <根目錄> 前置到所有檔名。如果也傳遞了 "-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
,則補丁中的子模組提交將被忽略,並且僅檢查相應子目錄是否存在(如果可能)並進行更新。