設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.48.1 → 2.50.1 無更改
-
2.48.0
2025-01-10
- 2.46.1 → 2.47.3 無更改
- 2.46.0 無更改
- 2.45.1 → 2.45.4 無更改
-
2.45.0
2024-04-29
- 2.43.2 → 2.44.4 無變化
-
2.43.1
2024-02-09
- 2.40.1 → 2.43.0 無更改
-
2.40.0
2023-03-12
- 2.38.1 → 2.39.5 無更改
-
2.38.0
2022-10-02
- 2.37.4 → 2.37.7 無更改
-
2.37.3
2022-08-30
- 2.34.1 → 2.37.2 無更改
-
2.34.0
2021-11-15
- 2.25.1 → 2.33.8 無更改
-
2.25.0
2020-01-13
- 2.22.1 → 2.24.4 無更改
- 2.22.0 無更改
- 2.21.1 → 2.21.4 無更改
-
2.21.0
2019-02-24
- 2.18.1 → 2.20.5 無更改
-
2.18.0
2018-06-21
- 2.17.0 → 2.17.6 無更改
-
2.16.6
2019-12-06
- 2.15.4 無更改
-
2.14.6
2019-12-06
- 2.11.4 → 2.13.7 無變更
-
2.10.5
2017-09-22
- 2.8.6 → 2.9.5 無更改
-
2.7.6
2017-07-30
- 2.5.6 → 2.6.7 無更改
-
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
add
[--verbose
|-v
] [--dry-run
|-n
] [--force
|-f
] [--interactive
|-i
] [--patch
|-p
] [--edit
|-e
] [--
[no-
]all
|-A
|--
[no-
]ignore-removal
| [--update
|-u
]] [--sparse
] [--intent-to-add
|-N
] [--refresh
] [--ignore-errors
] [--ignore-missing
] [--renormalize
] [--chmod=
(+
|-
)x
] [--pathspec-from-file=
<file> [--pathspec-file-nul
]] [--
] [<pathspec>…]
描述
此命令使用工作樹中找到的當前內容更新索引,以準備下一次提交的暫存內容。它通常會整體新增現有路徑的當前內容,但透過一些選項,它也可以用於新增僅應用了對工作樹檔案部分更改的內容,或刪除工作樹中不再存在的路徑。
“索引”儲存了工作樹內容的快照,正是此快照被用作下一次提交的內容。因此,在對工作樹進行任何更改之後,以及在執行 commit 命令之前,您必須使用 add
命令將任何新建或修改的檔案新增到索引中。
此命令可以在提交前執行多次。它只在執行 add 命令時新增指定檔案的內容;如果您希望將後續更改包含在下一次提交中,則必須再次執行 git
add
以將新內容新增到索引中。
git
status
命令可用於獲取哪些檔案有更改且已暫存以供下次提交的摘要。
git
add
命令預設不會新增被忽略的檔案。如果命令列上明確指定了任何被忽略的檔案,git
add
將失敗並列出被忽略的檔案。透過 Git 執行的目錄遞迴或檔名萬用字元(在 shell 之前引用您的萬用字元)找到的被忽略檔案將被靜默忽略。git
add
命令可以使用 -f
(force) 選項來新增被忽略的檔案。
有關將內容新增到提交的替代方法,請參閱 git-commit[1]。
選項
- <pathspec>...
-
要新增內容的檔案。可以使用檔案萬用字元(例如
*.c
)來新增所有匹配的檔案。還可以給定一個開頭的目錄名(例如dir
來新增dir/file1
和dir/file2
),以更新索引來匹配目錄的整體當前狀態(例如,指定dir
不僅會記錄工作樹中修改過的檔案dir/file1
,工作樹中新增的檔案dir/file2
,還會記錄工作樹中刪除的檔案dir/file3
)。請注意,舊版本的 Git 曾經會忽略已刪除的檔案;如果您想新增修改過的或新建的檔案但忽略已刪除的檔案,請使用--no-all
選項。有關 <pathspec> 語法的更多詳細資訊,請參閱 gitglossary[7] 中的 pathspec 條目。
-n
--dry-run
-
不實際新增檔案,僅顯示它們是否存在以及/或是否會被忽略。
-v
--verbose
-
顯示詳細資訊。
-f
--force
-
允許新增原本被忽略的檔案。
--sparse
-
允許更新稀疏檢出錐體之外的索引條目。通常,
git
add
拒絕更新其路徑不符合稀疏檢出錐體的索引條目,因為這些檔案可能會在沒有警告的情況下從工作樹中刪除。有關更多詳細資訊,請參閱 git-sparse-checkout[1]。 -i
--interactive
-
以互動方式將工作樹中修改過的內容新增到索引。可以提供可選的路徑引數以將操作限制為工作樹的一個子集。有關詳細資訊,請參閱“互動模式”。
-p
--patch
-
互動式地選擇索引和工作樹之間的補丁塊(hunks),並將其新增到索引中。這讓使用者有機會在將修改過的內容新增到索引之前審查差異。
這實際上運行了
add
--interactive
,但繞過了初始命令選單,直接跳轉到patch
子命令。有關詳細資訊,請參閱“互動模式”。 -e
--edit
-
在編輯器中開啟與索引的差異,並允許使用者編輯它。編輯器關閉後,調整補丁塊標題並將補丁應用到索引。
此選項的目的是選擇要應用的補丁行,甚至修改要暫存的行內容。這比使用互動式補丁塊選擇器更快捷、更靈活。然而,很容易混淆自己並建立無法應用到索引的補丁。請參閱下面的“編輯補丁”。
-u
--update
-
僅更新索引中已存在匹配 <pathspec> 的條目。這會刪除並修改索引條目以匹配工作樹,但不新增任何新檔案。
如果使用
-u
選項時未給定 <pathspec>,則會更新整個工作樹中所有已跟蹤的檔案(舊版本的 Git 曾經將更新限制在當前目錄及其子目錄)。 -A
--all
--no-ignore-removal
-
不僅在工作樹中有檔案匹配 <pathspec> 的地方更新索引,而且在索引中已存在條目的地方也更新。這會新增、修改和刪除索引條目以匹配工作樹。
如果使用
-A
選項時未給定 <pathspec>,則會更新整個工作樹中所有檔案(舊版本的 Git 曾經將更新限制在當前目錄及其子目錄)。 --no-all
--ignore-removal
-
透過新增索引中未知的新檔案和工作樹中修改過的檔案來更新索引,但忽略已從工作樹中刪除的檔案。當未使用 <pathspec> 時,此選項是空操作。
此選項主要是為了幫助習慣舊版本 Git 的使用者,舊版本 Git 中的
git
add
<pathspec>... 是git
add
--no-all
<pathspec>... 的同義詞,即忽略已刪除的檔案。 -N
--intent-to-add
-
僅記錄該路徑稍後將被新增的事實。該路徑的條目被放置在索引中,不包含任何內容。這對於使用
git
diff
顯示此類檔案的未暫存內容,以及使用git
commit
-a
提交它們等情況非常有用。 --refresh
-
不新增檔案,僅重新整理它們在索引中的 stat() 資訊。
--ignore-errors
-
如果某些檔案因索引錯誤而無法新增,請不要中止操作,而是繼續新增其他檔案。該命令仍將以非零狀態退出。可以將配置變數
add.ignoreErrors
設定為 true,以使其成為預設行為。 --ignore-missing
-
此選項只能與
--dry-run
一起使用。透過使用此選項,使用者可以檢查給定檔案中的任何一個是否會被忽略,無論它們是否已存在於工作樹中。 --no-warn-embedded-repo
-
預設情況下,
git
add
在不使用git
submodule
add
建立.gitmodules
中的條目而將嵌入式倉庫新增到索引時會發出警告。此選項將抑制該警告(例如,如果您正在手動對子模組執行操作)。 --renormalize
-
將“清理”過程重新應用於所有已跟蹤檔案,以強制將它們再次新增到索引。這在更改
core.autocrlf
配置或text
屬性後很有用,以便糾正使用錯誤 CRLF/LF 行尾符新增的檔案。此選項隱含-u
。單獨的 CR 字元保持不變,因此 CRLF 清理為 LF,而 CRCRLF 序列只會被部分清理為 CRLF。 --chmod=
(+
|-
)x
-
覆蓋新增檔案的可執行位。可執行位僅在索引中更改,磁碟上的檔案保持不變。
--pathspec-from-file=
<file>-
路徑規範(pathspec)在 <file> 中傳遞,而不是命令列引數。如果 <file> 恰好是
-
,則使用標準輸入。路徑規範元素由 LF 或 CR/LF 分隔。路徑規範元素可以像配置變數core.quotePath
所解釋的那樣引用(參見 git-config[1])。另請參閱--pathspec-file-nul
和全域性--literal-pathspecs
。 --pathspec-file-nul
-
僅在與
--pathspec-from-file
一起使用時有意義。路徑規範元素由 NUL 字元分隔,所有其他字元都被視為字面值(包括換行符和引號)。 --
-
此選項可用於將命令列選項與檔案列表分開(當檔名可能被誤認為是命令列選項時很有用)。
示例
-
新增
Documentation
目錄及其子目錄下所有*.txt
檔案的內容$ git add Documentation/\*.txt
請注意,在此示例中,星號
*
已被 shell 引用;這使得命令能夠包含Documentation/
目錄子目錄中的檔案。 -
考慮新增所有
git-*.sh
指令碼中的內容$ git add git-*.sh
因為此示例允許 shell 展開星號(即您明確列出檔案),所以它不考慮
subdir/git-foo.sh
。
互動模式
當命令進入互動模式時,它會顯示 status 子命令的輸出,然後進入其互動式命令迴圈。
命令迴圈會顯示可用子命令列表,並給出提示“What now> ”。通常,當提示以單個 > 結尾時,您只能從給定的選項中選擇一個並按回車,例如
*** Commands *** 1: status 2: update 3: revert 4: add untracked 5: patch 6: diff 7: quit 8: help What now> 1
只要選擇是唯一的,您也可以說 s
或 sta
或 status
。
主命令迴圈有 6 個子命令(加上 help 和 quit)。
- status
-
這顯示了
HEAD
和索引之間的更改(即如果您執行git
commit
將提交的內容),以及每個路徑的索引和工作樹檔案之間的更改(即您可以在git
commit
之前使用git
add
進一步暫存的內容)。示例輸出如下:staged unstaged path 1: binary nothing foo.png 2: +403/-35 +1/-1 add-interactive.c
它顯示
foo.png
與HEAD
存在差異(但由於是二進位制檔案,無法顯示行數),並且索引副本和工作樹版本之間沒有差異(如果工作樹版本也不同,則會顯示 binary 而不是 nothing)。另一個檔案add-interactive.c
,如果您提交索引中的內容,則有 403 行新增和 35 行刪除,但工作樹檔案有進一步的修改(一次新增和一次刪除)。 - update
-
這會顯示狀態資訊併發出“Update>>”提示。當提示以雙 >> 結尾時,您可以進行多項選擇,用空格或逗號連線。您也可以指定範圍。例如,“2-5 7,9”從列表中選擇 2,3,4,5,7,9。如果範圍中的第二個數字被省略,則取所有剩餘的補丁。例如,“7-”從列表中選擇 7,8,9。您可以說 * 來選擇所有內容。
您選擇的內容將以 * 突出顯示,如下所示:
staged unstaged path 1: binary nothing foo.png * 2: +403/-35 +1/-1 add-interactive.c
要取消選擇,請在輸入前加上
-
,如下所示:Update>> -2
做出選擇後,以空行應答以將工作樹檔案中選定路徑的內容暫存到索引中。
- revert
-
這與 update 有非常相似的使用者介面,所選路徑的暫存資訊將恢復為 HEAD 版本。恢復新路徑會使它們變為未跟蹤狀態。
- add untracked
-
這與 update 和 revert 有非常相似的使用者介面,允許您將未跟蹤的路徑新增到索引。
- patch
-
這允許您從類似 status 的選擇中選擇一個路徑。選擇路徑後,它會顯示索引和工作樹檔案之間的差異,並詢問您是否要暫存每個補丁塊(hunk)的更改。您可以選擇以下選項之一併按回車
y - stage this hunk n - do not stage this hunk q - quit; do not stage this hunk or any of the remaining ones a - stage this hunk and all later hunks in the file d - do not stage this hunk or any of the later hunks in the file g - select a hunk to go to / - search for a hunk matching the given regex j - leave this hunk undecided, see next undecided hunk J - leave this hunk undecided, see next hunk k - leave this hunk undecided, see previous undecided hunk K - leave this hunk undecided, see previous hunk s - split the current hunk into smaller hunks e - manually edit the current hunk p - print the current hunk ? - print help
在決定所有補丁塊的去留後,如果選擇了任何補丁塊,則索引將根據所選的補丁塊進行更新。
透過將配置變數
interactive.singleKey
設定為true
,您可以省略在此處輸入回車。 - diff
-
這讓您可以檢視將要提交的內容(即
HEAD
和索引之間)。
編輯補丁
呼叫 git
add
-e
或從互動式補丁塊選擇器中選擇 e
將在您的編輯器中開啟一個補丁;編輯器退出後,結果將應用於索引。您可以隨意對補丁進行更改,但請注意,某些更改可能會導致混亂的結果,甚至導致補丁無法應用。如果您想完全中止操作(即不在索引中暫存任何新內容),只需刪除補丁的所有行。下面的列表描述了您在補丁中可能會看到的一些常見內容,以及哪些編輯操作對它們有意義。
還可以執行更復雜的操作。但請注意,由於補丁僅應用於索引而非工作樹,工作樹將顯得“撤銷”索引中的更改。例如,在索引中引入一條既不在 HEAD
也不在工作樹中的新行,將暫存該新行以供提交,但該行在工作樹中將顯示為已恢復。
避免使用這些結構,或極其謹慎地使用。
還有一些操作應完全避免,因為它們將使補丁無法應用
-
新增上下文(“ ”)或刪除(“-”)行
-
刪除上下文或刪除行
-
修改上下文或刪除行的內容
配置
本節中以下所有內容均從 git-config[1] 文件中選擇性地包含。內容與彼處相同: