git 跟踪和 git staging 的概念

问题描述 投票:0回答:5

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

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

我对这两个概念有点困惑,因为我假设跟踪文件的更改不同于暂存文件以进行提交

git staging
5个回答
47
投票

Git 基本上有 4 个主要的文件在本地仓库中的状态:

  • untracked: 文件是新的,Git 对此一无所知。如果你
    git add <file>
    ,它变成:
  • staged: 现在 Git 知道文件(跟踪),但也使它成为下一个提交批次的一部分(称为 index)。如果你
    git commit
    ,它变成:
  • 未更改: 该文件自上次提交以来未更改。如果你修改它,它变成:
  • unstaged: 已修改但还不是下一次提交的一部分。你可以用
    git add
  • 再次上演

如您所见,

git add
track 未跟踪的文件和 stage 任何文件。

另外:您可以使用

git rm --cached filename
取消跟踪未提交的文件,并使用
git reset HEAD <file>

取消暂存文件

19
投票

Git 有一个称为“索引”的概念。要创建一个新的提交,您可以用您希望在下一次提交中拥有的内容填充索引。这意味着您必须使用

git add
明确告诉 Git 您希望在下一次提交中显示哪些更改。 (
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
ed 版本后继续编辑文件(本地)犯罪。很明显(或可能不是),您可以在提交最终版本之前多次
git add
文件。


0
投票

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


当我们将文件从工作目录移动到暂存索引时,git 开始跟踪更改,表明该文件已暂存(在暂存索引中),并且因为它也在跟踪更改,所以我们可以说该文件是跟踪。

暂存索引中跟踪的文件和存储库中跟踪的文件是有区别的。当更改提交到存储库时,它们成为存储库历史的一部分,而暂存索引中的更改对 git 历史没有影响。

© www.soinside.com 2019 - 2024. All rights reserved.