Git跟踪和Git暂存的概念

evrscar2  于 2023-04-10  发布在  Git
关注(0)|答案(5)|浏览(138)

当你修改工作目录中的文件时,git会告诉你使用“git add”来暂存。
当你向工作目录中添加一个新文件时,git会告诉你使用“git add”来开始跟踪。
我对这两个概念有点困惑,因为我假设跟踪文件的更改与暂存它以提交是不同的

pu3pd22g

pu3pd22g1#

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

***untracked:**文件是新的,Git对它一无所知。如果你git add <file>,它变成:
***staged:**现在Git知道文件(被跟踪),但也将其作为下一个提交批次的一部分(称为 index)。如果你git commit,它将变成:
***unchanged:**文件自上次提交后没有发生变化,如果 * 修改 *,则变为:
***unstaged:**已修改,但尚未成为下一次提交的一部分,可以使用git add再次stage

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

  • 此外:您可以使用git rm --cached filename取消跟踪未提交的文件,并使用git reset HEAD <file>取消暂存文件 *
nlejzf6q

nlejzf6q2#

Git有一个被称为“索引”的概念。要创建一个新的提交,你需要用你希望在下一次提交中包含的内容填充索引。这意味着你必须使用git add显式地告诉Git你希望在下一次提交中出现哪些更改。(git add -p只添加单个块)
无论你是只更新一个文件(»stage changes«)还是添加一个新文件的完整内容(»start tracking a file«),Git都不会有什么区别--这两种情况下,Git的索引看到的都是添加的新更改

tyu7yeag

tyu7yeag3#

当您添加文件以开始跟踪时,它还会暂存其内容。
如果要添加要跟踪的文件而不暂存该文件,可以使用

git add -N
8mmmxcuj

8mmmxcuj4#

您确定的这两个git add步骤本质上做的是相同的事情,只是由于它们的到达路线不同而有不同的解释。
git add只是告诉git,提供的文件是您希望拥有的文件,并且是当前格式的文件(它的内容),在它的源代码控制仓库中。在这一点上,git将采取文件的快照(并且它在索引中保留一个注解),以便在您准备好并添加对文件的所有更改时使用(即在暂存区域中编组在一起),对于您的git commit(带有适当的消息;- ).
一旦git被告知该文件(例如@avh的-N选项)它会注意到在各种命令的伪装下(跟踪)对文件的更改(比如git status)。因此,稍后,当您不再希望跟踪某个文件时,您必须显式地告诉git(git rm <file>),然后可以继续编辑文件(在本地)在你已经add艾德了提交中的版本之后。(或者也许不是),您可以在提交最终版本之前多次git add文件。

prdp8dxp

prdp8dxp5#

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

当我们将一个文件从工作目录移动到暂存索引时,git开始跟踪更改,表明该文件已暂存(在暂存索引中),并且因为它也在跟踪更改,所以我们可以说该文件已被跟踪。
暂存索引中跟踪的文件和仓库中跟踪的文件是有区别的,当更改提交到仓库时,它们会成为仓库历史的一部分,而暂存索引中的更改不会影响git历史。

相关问题