Git跟踪和Git暂存的概念

31

当您修改工作目录中的文件时,git 会告诉您使用 "git add" 来暂存文件。

当您向工作目录中添加新文件时,git 会告诉您使用 "git add" 开始跟踪。

我对这两个概念有些困惑,因为我认为跟踪文件的更改与将其暂存以进行提交是不同的。

5个回答

51

Git基本上有4种主要状态用于在您的本地存储库中的文件:

  • 未跟踪: 文件是新的,Git不知道它。如果你使用git add <file>,它会变成:
  • 暂存: 现在Git已知文件(已跟踪),但也将其作为下一次提交批处理的一部分(称为索引)。如果你使用git commit,它会变成:
  • 未修改: 文件自上次提交以来没有更改。如果你修改它,它会变成:
  • 未暂存: 修改了但还不是下一次提交的一部分。您可以再次使用git add将其暂存。

正如您所看到的,git add跟踪未跟踪的文件,并暂存任何文件。

另外: 您可以使用git rm --cached filename取消跟踪一个未提交的文件,并使用git reset HEAD <file>取消暂存一个已暂存的文件。


19

Git有一个称为“索引”的概念。要创建新的提交,您需要使用内容填充索引,这些内容将出现在下一次提交中。这意味着您必须明确告诉Git希望出现在下一次提交中的更改,方法是使用git add。(使用git add -p添加单个文件块)

对于Git来说,无论是仅更新文件(“暂存更改”)还是添加新文件的全部内容(“开始跟踪文件”),都不会产生任何影响 - 两种情况下,Git的索引看到的都是新更改的添加。


11

当您添加一个文件开始跟踪时,它也会将其内容提交到暂存区。

如果您想要添加一个文件用于跟踪但不进行暂存操作,您可以使用

git add -N

1

你所提到的两个git add步骤本质上是相同的,只是因为它们的到达路径不同而有不同的解释。

git add简单地告诉git,所提供的文件是你希望在源代码控制存储库中以其当前精确形式(其内容)拥有的文件。此时,git将对该文件进行快照(并在其索引中保留一个注释),以便在您准备好所有文件的更改并添加(即在暂存区中汇总)后,为您的git commit(附带适当的消息;-)做好准备。

一旦git被告知了该文件(例如@avh的-N选项),它将通过各种命令(如git status)的幌子跟踪文件的更改。因此,稍后,当您不再想要跟踪某个文件时,必须明确告诉git(git rm <file>),并且您可以在add提交版本之后继续编辑文件(本地)。几乎显然(或者也许不是),您可以在提交最终版本之前多次git add一个文件。


0

让我来解释一下Git的三树架构,它包括工作目录、暂存区和仓库:


enter image description here

当我们将一个文件从工作目录移动到暂存区时,Git开始跟踪这些更改,表明该文件已经被暂存(在暂存区中),因为它也在跟踪更改,所以我们可以说该文件已经被追踪。
在暂存区中跟踪的文件和在仓库中跟踪的文件有所不同。当更改提交到仓库时,它们成为仓库历史的一部分,而暂存区中的更改对Git历史没有影响。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接