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。即還沒添加到索引庫中。