2011-09-27 232 views
19

當你在工作目錄中修改一個文件時,git告訴你使用「git add」來登臺。git跟蹤和git staging的概念

當你添加一個新文件到你的工作目錄時,git告訴你使用「git add」開始跟蹤。

我有點困惑,這些概念2,因爲我以爲跟蹤文件的變化是從登臺它提交

回答

12

Git有被稱爲「索引」的概念。要創建一個新的提交,你需要在下一個提交中填入你想要的內容。這意味着您必須通過使用git add來明確告訴Git您希望在下一次提交中出現哪些更改。 (git add -p僅添加單個區塊)

無論您是僅更新文件(»stage changes«)還是添加新文件的全部內容(»開始跟蹤文件«) - 兩次,Git的索引看到的全部內容都是增加了新的變化

+0

好棒解釋上演文件。 – cheznead

8

當你添加一個文件來啓動跟蹤,還階段它的內容有所不同。

如果你想添加一個跟蹤文件,而不分段它,你可以使用

git add -N 
1

您確定的git add步驟基本上都是一樣的,因爲它們的到達路線只是有不同的解釋。

git add只是簡單地告訴git提供的文件是一個你想要的文件,它的確切的當前形式(它的內容)在它的源代碼控制庫中。在這一點上,git會爲該文件創建一個快照(並且它會在其索引中保留一個備註),以便在您準備好所有對文件所做的更改並添加(例如,集結在暫存區域中)時準備好你的git commit(有適當的信息;-)。

一旦混帳已被告知有關文件(例如@ AVH的-N選項),它會發現各種命令(如git status)假借(軌道)更改該文件。因此,稍後,當不再需要跟蹤文件(git rm <file>)時,必須明確告訴git,並且在您提交版本add後,您可以繼續編輯文件(本地)。幾乎很明顯(或者也可能不是),在提交最終版本之前,您可以多次訪問一個文件git add

21

的Git基本上有在當地的回購協議的文件4種主要狀態:

  • 未經跟蹤:該文件是新的,Git會對此一無所知。如果你git add <file>,就變成:
  • 上演:現在的Git知道文件(跟蹤),但也使得下一提交的批處理(稱爲指數)的一部分。如果你git commit,它變成:
  • 不變:該文件自上次提交以來沒有改變。如果你修改它,它變成:
  • 非掛鉤:修改,但不是下一個提交的一部分。你可以用git add

再次階段,正如你所看到的,git add軌道未跟蹤文件,並階段的任何文件。

另外:您可以untrack一個未提交的文件,git rm --cached filename和unstage與git reset HEAD <file>