git跟踪和git分期的概念

时间:2011-09-27 06:04:03

标签: git staging

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

当您将新文件添加到工作目录时,git会告诉您使用“git add”来开始跟踪。

我对这两个概念感到有点困惑,因为我假设跟踪文件的更改与提交它的提交不同

4 个答案:

答案 0 :(得分:26)

Git在本地仓库中基本上有4种主要状态:

  • 未跟踪:该文件是新的,Git对此一无所知。如果您git add <file>,则变为:
  • 暂存:现在Git知道该文件(已跟踪),但也使其成为下一个提交批处理(称为索引)的一部分。如果您git commit,则变为:
  • 未更改:自上次提交后文件未更改。如果您修改,它将变为:
  • unstaged:已修改,但尚未成为下一次提交的一部分。您可以使用git add
  • 再次进行演示

如您所见,git add跟踪未跟踪的文件,阶段任何文件。

另外:您可以使用git rm --cached filename取消删除未提交的文件,并使用git reset HEAD <file>

取消暂存分段文件

答案 1 :(得分:14)

Git有一个被称为“索引”的概念。要创建新提交,请使用您希望在下次提交时拥有的内容填充索引。这意味着您必须使用git add明确告诉Git您希望在下一次提交中出现哪些更改。 (git add -p只添加单身帅哥)

Git是否只更新文件(»stage changes«)或添加新文件的全部内容(»开始跟踪文件«) - 两次都是Git的,这对Git没有任何影响。 index see是添加了新的更改

答案 2 :(得分:8)

当您添加文件以开始跟踪时,它还会分段其内容。

如果要添加文件以进行跟踪而不进行暂存,可以使用

git add -N

答案 3 :(得分:1)

您识别的两个git add步骤基本上都是相同的,因为它们的到达途径只是有不同的解释。

git add只是告诉git所提供的文件是您希望拥有的文件,在其源控制存储库中以其当前的形式(其内容)。此时,git将获取文件的快照(并在其索引中保留一个注释),以便在您准备好并添加对文件的所有更改(即在暂存区域中编组在一起)时,它已准备就绪,你的git commit(带有适当的信息; - )。

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