「 git add -A」和「 git add」之間的區別

git add [--all|-A]命令彷佛與git add .相同git add . 。 這個對嗎? 若是沒有,它們有何不一樣? git


#1樓

Git 2.0中, git add -A是默認值: git add . 等於git add -A .github

git add <path>如今與「 git add -A <path> 」相同,所以「 git add dir/ 」將注意到您從目錄中刪除的路徑並記錄該刪除。
在舊版本的Git中,「 git add <path> 」用於忽略刪除。 ide

若是您確實願意,能夠說「 git add --ignore-removal <path> 」僅在<path>添加添加或修改的路徑。 學習

git add就像git add :/從頂部git repo文件夾添加全部內容 )。
請注意,git 2.7(2015年11月)將容許您添加一個名爲「 : 」的文件夾!
參見Junio C gitstergitster 提交的29abb33 (2015年10月25日ui


請注意,在談論git add .時, 從git 2.0開始(2014年第一季度或第二季度) git add . (工做樹中的當前路徑),您必須使用' . 在其餘git add命令。 spa

這意味着: 命令行

git add -A .等效於git add .; git add -u . code

(請注意git add -Agit add -u的額外' . ') 遞歸

由於git add -Agit add -u會在整個工做樹上運行(僅從git 2.0開始),而不只僅是在當前路徑上運行。 索引

這些命令將在Git 2.0中的整個樹上運行,以與「 git commit -a 」和其餘命令保持一致 。 由於沒有機制可使「 git add -u 」表現得像「 git add -u . 」,因此對於那些習慣於「 git add -u 」(無pathspec)的人來講,僅更新路徑索引很是重要在當前子目錄中開始訓練他們的手指,使其在Git 2.0出現以前明確表示「 git add -u . 」。

當這些命令在沒有路徑規範的狀況下運行時,以及在當前目錄以外進行本地更改時,都會發出警告 ,由於在這種狀況下,Git 2.0中的行爲將不一樣於今天的版本。


#2樓

一個更簡化的快速答案:

在下面都作(與git add --all同樣

git add -A

暫存新文件和修改過的文件

git add .

階段修改和刪除文件

git add -u

#3樓

這是用於快速理解的表:

Git版本1.x在此處輸入圖片說明

Git版本2.x在此處輸入圖片說明

長格式標誌:

  • git add -A等同於git add --all
  • git add -u等效於git add --update

進一步閱讀:


#4樓

Git 2.0 改變了一些事情

  • -A如今是默認值
  • 如今可使用--ignore-removal舊行爲
  • 子目錄中沒有命令行路徑的git add -ugit add -A在整個樹上運行

所以對於git 2,答案是:

  • git add .git add -A . 在當前目錄中添加新的/修改的/刪除的文件
  • git add --ignore-removal . 在當前目錄中添加新文件/修改過的文件
  • git add -u . 在當前目錄中添加修改/刪除的文件
  • 不帶點的狀況下,添加項目中的全部文件,不管當前目錄如何

#5樓

最後,我想我明白了,很是感謝你們。 我但願這能夠增長一些清晰度。

!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)

限制符能夠是-u或-A或nil。

Pathspec能夠是文件路徑或點「。」。 指示當前目錄。

有關git如何「添加」的重要背景知識。

  • Git永遠不會自動識別以點爲前綴的不可見文件(點文件)。 他們甚至從未被列爲「未跟蹤」。
  • git永遠不會添加空文件夾。 他們甚至從未被列爲「未跟蹤」。 (一種解決方法是向跟蹤的文件中添加一個可能不可見的空白文件。)
  • Git狀態不會顯示子文件夾信息,即未跟蹤的文件,除非已跟蹤該子文件夾中的至少一個文件。 在此以前,git認爲整個文件夾超出範圍,稱爲「空」。 它沒有跟蹤的項目。
  • 指定filespec ='。 (點)或當前目錄不是遞歸的,除非也指定了-A。 點嚴格指的是當前目錄-它忽略了上下目錄。

如今,有了這些知識,咱們能夠應用上面的答案。

限制器以下。

  • -u = --update =跟蹤文件的子集=>添加=否; 更改=是; 刪除=是。 =>若是該項目被跟蹤。
  • -A = --all(沒有這樣的-a,不會產生語法錯誤)=全部未跟蹤/跟蹤的文件的超集,除非在Git <2.0中,若是給出了點文件規範,則僅考慮該特定文件夾。 =>若是能夠識別該項目,則git add -A將找到並添加它。

pathspec以下。

  • 在Git <2.0中,對於兩個限制器(更新和所有),新的默認設置是對整個工做樹進行操做,而不是對當前路徑進行操做(git <= 1.9),
  • 可是,在v2.0中,能夠將操做限制爲當前路徑:僅添加顯式點後綴(在Git <= 1.9中也有效);

git add -A .

git add -u .

總之,個人政策是

  • 1.確保要添加的全部塊/文件都處於git狀態。
  • 1A。若是因爲看不見的文件/文件夾而缺乏任何項目,請分別添加它們。
  • 2.具備良好的gitignore,以便一般僅關注和/或沒法識別感興趣的文件。
  • 3.從倉庫的最高層,「 git add -A」添加全部項目。 這適用於全部版本的git。
  • 4.若是須要,從索引中刪除全部須要的項目。
  • 6.若是有大錯誤,請執行「 git reset」以徹底清除索引。
相關文章
相關標籤/搜索