?
This document uses PHP Chinese website manual Release
git-add - 將文件內(nèi)容添加到索引
git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p] [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]] [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--chmod=(+|-)x] [--] [<pathspec>…]
此命令使用工作樹中的當(dāng)前內(nèi)容更新索引,以準(zhǔn)備下一個提交的內(nèi)容。它通常會將現(xiàn)有路徑的當(dāng)前內(nèi)容作為一個整體添加,但通過一些選項,還可以使用它僅添加對所應(yīng)用的工作樹文件進(jìn)行的部分更改的內(nèi)容,或刪除工作樹中不存在的路徑了。
“索引”包含工作樹內(nèi)容的快照,并且這個快照被當(dāng)作下一次提交的內(nèi)容。因此,在對工作樹進(jìn)行任何更改之后,在運行commit命令之前,必須使用add
命令將任何新的或修改的文件添加到索引。
在提交之前,命令可以執(zhí)行多次。它只在add命令運行時添加指定文件的內(nèi)容; 如果您希望在下一次提交中包含后續(xù)更改,則必須再次運行git add
以將新內(nèi)容添加到索引。
git status
命令可用于獲取在下一次提交階段更改的文件的摘要。
git add
命令默認(rèn)不會添加被忽略的文件。如果在命令行上明確指定了任何被忽略的文件,git add
將失敗并顯示被忽略的文件列表。忽略由Git執(zhí)行的目錄遞歸或文件名匹配達(dá)到的文件(在shell之前引用您的globs)將被忽略。git add
命令可以用來添加-f
(強制)選項忽略的文件。
請參閱git-commit [1]了解將內(nèi)容添加到提交的其他方法。
<pathspec>…
要從中添加內(nèi)容的文件。*.c
可以給Fileglobs(例如)添加所有匹配的文件。還可以給出一個主要的目錄名(例如dir
添加dir/file1
和dir/file2
)來更新索引以匹配整個目錄的當(dāng)前狀態(tài)(例如,指定dir
將記錄dir/file1
工作樹中修改的文件,dir/file2
添加到工作中的文件樹,也是一個文件dir/file3
,從工作樹移除需要注意的是舊版本的Git用于忽略刪除的文件;使用--no-all
,如果你想添加修改或新的文件,但忽略刪除那些選項。
有關(guān)<pathspec>語法的更多詳細(xì)信息,請參閱pathspec
gitglossary [7]中的條目。
-n --dry-run
實際不要實際添加文件,只顯示它們是否存在和/或?qū)⒈缓雎浴?/p>
-v --verbose
Be verbose.
-f --force
允許添加被忽略的文件。
-i --interactive
在工作樹中交互添加修改的內(nèi)容到索引??梢蕴峁┛蛇x的路徑參數(shù),以將操作限制為工作樹的子集。有關(guān)詳情,請參閱“交互模式”。
-p --patch
在索引和工作樹之間交互地選擇補丁塊,并將它們添加到索引中。這使用戶有機會在將修改后的內(nèi)容添加到索引之前查看差異。
有效地運行add --interactive
,但繞過最初的命令菜單并直接跳轉(zhuǎn)到patch
子命令。有關(guān)詳情,請參閱“交互模式”。
-e --edit
在編輯器中打開差異與索引并讓用戶進(jìn)行編輯。編輯器關(guān)閉后,調(diào)整大塊頭并將補丁應(yīng)用到索引。
此選項的目的是挑選要應(yīng)用的補丁行,或者甚至修改要分級的行內(nèi)容。這比使用交互式外觀選擇器更快更靈活。但是,很容易混淆自己并創(chuàng)建一個不適用于索引的補丁。請參閱下面的編輯補丁。
-u --update
更新已存在匹配<pathspec>條目的索引。這會刪除和修改索引條目以匹配工作樹,但不會添加新文件。
如果在使用-u
選項時沒有給出<pathspec> ,則會更新整個工作樹中的所有跟蹤文件(用于將更新限制為當(dāng)前目錄及其子目錄的舊版本Git)。
-A --all --no-ignore-removal
更新索引不僅在工作樹具有匹配<pathspec>的文件的位置,而且索引已經(jīng)有條目的位置。這會添加,修改和刪除索引條目以匹配工作樹。
如果在使用-A
選項時沒有給出<pathspec> ,則會更新整個工作樹中的所有文件(Git的舊版本用于將更新限制為當(dāng)前目錄及其子目錄)。
--no-all --ignore-removal
通過添加索引未知的新文件和工作樹中修改的文件來更新索引,但忽略已從工作樹中刪除的文件。當(dāng)沒有使用<pathspec>時,該選項是無操作的。
這個選項主要是為了幫助習(xí)慣于老版本Git的用戶,他們的“git add <pathspec> ...”是“git add --no-all <pathspec> ...”的同義詞,即忽略被刪除的文件。
-N --intent-to-add
只記錄路徑將在稍后添加的事實。路徑條目放置在沒有內(nèi)容的索引中。除此之外,這對于顯示這些文件的非分離內(nèi)容git diff
以及提交它們git commit -a
很有用。
--refresh
不要添加文件,而只需刷新索引中的stat()信息。
--ignore-errors
如果某些文件因索引錯誤而無法添加,請不要中止操作,而是繼續(xù)添加其他文件。命令仍應(yīng)以非零狀態(tài)退出。add.ignoreErrors
可以將配置變量設(shè)置為true以使其成為默認(rèn)行為。
--ignore-missing
該選項只能與--dry-run一起使用。通過使用這個選項,用戶可以檢查是否有任何給定的文件被忽略,不管它們是否已經(jīng)存在于工作樹中。
--no-warn-embedded-repo
默認(rèn)情況下,git add
向嵌入式存儲庫添加索引時會發(fā)出警告,而不用git submodule add
在其中創(chuàng)建條目.gitmodules
。該選項將會禁止警告(例如,如果您正在手動對子模塊執(zhí)行操作)。
--chmod=(+|-)x
覆蓋添加文件的可執(zhí)行位??蓤?zhí)行位僅在索引中更改,磁盤上的文件保持不變。
--
此選項可用于將命令行選項與文件列表分開,(當(dāng)文件名可能被誤認(rèn)為是命令行選項時很有用)。
結(jié)構(gòu)
可選的配置變量core.excludesFile
表示文件的路徑,該文件包含要從git-add中排除的文件名的模式,類似于$ GIT_DIR / info / exclude。排除文件中的模式除了info / exclude中的使用外。見gitignore [5]。
添加目錄及其子目錄*.txt
下所有文件的內(nèi)容Documentation
:$ git add Documentation / \ *。txt注意*
在本例中星號是從shell引用的; 這讓命令包含來自目錄子目錄的Documentation/
文件。
考慮從所有g(shù)it - *。sh腳本添加內(nèi)容:
$ git add git-*.sh
因為這個例子讓shell擴展了星號(即你明確列出了這些文件),所以它沒有考慮subdir/git-foo.sh
。
當(dāng)命令進(jìn)入交互模式時,它顯示status
子命令的輸出,然后進(jìn)入其交互式命令循環(huán)。
命令循環(huán)顯示可用的子命令列表,并提示“What now>”。通常,當(dāng)提示以單個結(jié)尾時>
,您可以只選擇其中一個選項并輸入return,如下所示:
*** Commands *** 1: status 2: update 3: revert 4: add untracked 5: patch 6: diff 7: quit 8: help What now> 1
你也可以說s
或sta
或status
只要選擇是唯一的上方。
主要的命令循環(huán)有6個子命令(加上幫助和退出)。
狀態(tài)
這顯示了HEAD和索引之間的變化(即,如果你這么說會犯什么內(nèi)容git commit
),以及索引和工作樹文件之間的變化(也就是你可以在git commit
使用之前進(jìn)一步處理的內(nèi)容git add
)。示例輸出如下所示:
staged unstaged path 1: binary nothing foo.png 2: +403/-35 +1/-1 git-add--interactive.perl
它顯示foo.png與HEAD有區(qū)別(但是它是二進(jìn)制的,所以行數(shù)無法顯示),索引副本和工作樹版本之間沒有區(qū)別(如果工作樹版本也不同,binary
將顯示在的地方nothing
)。另一個文件git-add {litdd} interactive.perl添加了403行,如果您提交了索引中的內(nèi)容,則會刪除35行,但工作樹文件會進(jìn)一步修改(一次添加和一次刪除)。
更新
這將顯示狀態(tài)信息并發(fā)出“更新>>”提示。當(dāng)提示以double結(jié)尾時>>
,可以進(jìn)行多個選擇,并用空格或逗號連接。你也可以說范圍。例如“2-5 7,9”從列表中選擇2,3,4,5,7,9。如果省略范圍中的第二個數(shù)字,則會采用所有剩余的補丁。例如“7-”從列表中選擇7,8,9。你可以說*
選擇一切。
然后用你的選擇突出顯示*
,如下所示:
staged unstaged path 1: binary nothing foo.png* 2: +403/-35 +1/-1 git-add--interactive.perl
要刪除選擇,請使用-
在輸入前添加如下所示的內(nèi)容:
Update>> -2
做出選擇之后,回答一個空行,為索引中選定路徑的工作樹文件的內(nèi)容分段。
還原
這與用戶界面update
非常相似,并且所選路徑的暫存信息將恢復(fù)為HEAD版本的階段信息。恢復(fù)新路徑使得它們不受追蹤。
添加未跟蹤
這有一個非常相似的用戶界面update
和revert
,并允許您添加未經(jīng)跟蹤路徑索引。
patch
這使您可以從status
類似選擇中選擇一條路徑。選擇路徑后,它會顯示索引和工作樹文件之間的差異,并詢問您是否要逐步更改每個塊。您可以選擇以下選項之一并鍵入return:
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? - print help
在決定所有塊的命運之后,如果選擇了任何塊
,那么索引會用選定的塊更新。
您可以通過設(shè)置配置變量interactive.singleKey
為true
來省略必須在此輸入return 。
diff
這使您可以查看將要提交的內(nèi)容(即在HEAD和索引之間)。
調(diào)用git add -e
或e
從交互式外觀選擇器中選擇將在您的編輯器中打開一個修補程序; 編輯器退出后,結(jié)果將應(yīng)用于索引。您可以隨意對修補程序進(jìn)行任意更改,但請注意,某些更改可能會導(dǎo)致混淆結(jié)果,甚至導(dǎo)致無法應(yīng)用的修補程序。如果您想完全中止操作(即,在索引中沒有任何新操作),只需刪除該補丁的所有行即可。下面的列表描述了您可能在修補程序中看到的一些常見事項,以及哪些編輯操作對它們有意義。
添加內(nèi)容
添加的內(nèi)容由以“+”開頭的行表示。您可以通過刪除它們來防止暫存任何附加行。
刪除內(nèi)容
刪除的內(nèi)容由以“ - ”開頭的行表示。您可以通過將“ - ”轉(zhuǎn)換為“”(空格)來阻止他們的移除。
修改的內(nèi)容
修改的內(nèi)容由“ - ”行(刪除舊內(nèi)容),后跟“+”行(添加替換內(nèi)容)表示。您可以通過將“ - ”行轉(zhuǎn)換為“”并去除“+”行來阻止修改。請注意,只修改這一對的一半可能會對索引造成令人困惑的更改。
還有更復(fù)雜的操作可以執(zhí)行。但要小心,因為該補丁只適用于索引而不適用于工作樹,所以工作樹將顯示為“撤消”索引中的更改。例如,向不在HEAD和工作樹中的索引中引入一個新行將為新行提交提交,但該行將顯示為在工作樹中恢復(fù)。
避免使用這些構(gòu)造,或者非常謹(jǐn)慎地這樣做。
刪除未觸及的內(nèi)容
在索引和工作樹之間沒有差異的內(nèi)容可以顯示在上下文行上,以“”(空格)開頭。您可以通過將空間轉(zhuǎn)換為“ - ”來移除要移除的上下文行。生成的工作樹文件將顯示為重新添加內(nèi)容。
修改現(xiàn)有內(nèi)容
也可以通過將它們分段移除(通過將“”轉(zhuǎn)換為“ - ”)并在新內(nèi)容中添加“+”行來修改上下文行。同樣,可以修改現(xiàn)有添加或修改的“+”行。在任何情況下,新的修改都會在工作樹中恢復(fù)。
新的內(nèi)容
您也可以添加修補程序中不存在的新內(nèi)容; 只需添加新行,每行都以“+”開頭。添加將在工作樹中顯示恢復(fù)。
還有一些應(yīng)該完全避免的操作,因為它們會使修補程序無法應(yīng)用:
添加上下文(“”)或刪除(“ - ”)行
刪除上下文或刪除行
修改上下文或刪除行的內(nèi)容