git add命令


git add命令將檔案內容新增到索引(將修改新增到暫存區)。也就是將要提交的檔案的資訊新增到索引庫中。

簡介

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>…?]

描述

此命令將要提交的檔案的資訊新增到索引庫中(將修改新增到暫存區),以準備為下一次提交分段的內容。 它通常將現有路徑的當前內容作為一個整體新增,但是通過一些選項,它也可以用於新增內容,只對所應用的工作樹檔案進行一些更改,或刪除工作樹中不存在的路徑了。

「索引」儲存工作樹內容的快照,並且將該快照作為下一個提交的內容。 因此,在對工作樹進行任何更改之後,並且在執行git commit命令之前,必須使用git add命令將任何新的或修改的檔案新增到索引。

該命令可以在提交之前多次執行。它只在執行git add命令時新增指定檔案的內容; 如果希望隨後的更改包含在下一個提交中,那麼必須再次執行git add將新的內容新增到索引。

git status命令可用於獲取哪些檔案具有為下一次提交分段的更改的摘要。

預設情況下,git add命令不會新增忽略的檔案。 如果在命令列上顯式指定了任何忽略的檔案,git add命令都將失敗,並顯示一個忽略的檔案列表。由Git執行的目錄遞回或檔案名遍歷所導致的忽略檔案將被預設忽略。 git add命令可以用-f(force)選項新增被忽略的檔案。

範例

以下是一些範例 -

新增documentation目錄及其子目錄下所有*.txt檔案的內容:

$ git add documentation/*.txt

注意,在這個例子中,星號*是從shell參照的; 這允許命令包含來自 Documentation/目錄和子目錄的檔案。

將所有 git-*.sh 指令碼內容新增:

$ git add git-*.sh

因為這個例子讓shell擴充套件星號(即明確列出檔案),所以它不考慮子目錄中的檔案,如:subdir/git-foo.sh 這樣的檔案不會被新增。

基本用法

git add <path>

通常是通過git add <path>的形式把<path>新增到索引庫中,<path>可以是檔案也可以是目錄。

git不僅能判斷出<path>中,修改(不包括已刪除)的檔案,還能判斷出新添的檔案,並把它們的資訊新增到索引庫中。

$ git add .  # 將所有修改新增到暫存區
$ git add *  # Ant風格新增修改
$ git add *Controller   # 將以Controller結尾的檔案的所有修改新增到暫存區

$ git add Hello*   # 將所有以Hello開頭的檔案的修改新增到暫存區 例如:HelloWorld.txt,Hello.java,HelloGit.txt ...

$ git add Hello?   # 將以Hello開頭後面只有一位的檔案的修改提交到暫存區 例如:Hello1.txt,HelloA.java 如果是HelloGit.txt或者Hello.java是不會被新增的

git add -u [<path>]: 把<path>中所有跟蹤檔案中被修改過或已刪除檔案的資訊新增到索引庫。它不會處理那些不被跟蹤的檔案。省略<path>表示 . ,即當前目錄。

git add -A: []表示把中所有跟蹤檔案中被修改過或已刪除檔案和所有未跟蹤的檔案資訊新增到索引庫。省略<path>表示 . ,即當前目錄。

git add -i

我們可以通過git add -i [<path>]命令檢視中被所有修改過或已刪除檔案但沒有提交的檔案,並通過其revert子命令可以檢視<path>中所有未跟蹤的檔案,同時進入一個子命令系統。

比如:

$ git add -i
           staged     unstaged path
  1:        +0/-0      nothing branch/t.txt
  2:        +0/-0      nothing branch/t2.txt
  3:    unchanged        +1/-0 readme.txt

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp

這裡的t.txtt2.txt表示已經被執行了git add,待提交。即已經新增到索引庫中。
readme.txt表示已經處於tracked下,它被修改了,但是還沒有執行git add。即還沒新增到索引庫中。