2011-09-27 231 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>