Git的暂存区背后的目的是什么?

问题描述 投票:-1回答:1

对于这个看似老掉牙的问题,我看了很多答案。但我有自己的理解,想知道我的理解是否正确。

想象一下,我有一个HTML、JS、CSS文件,我正在做。而在我的下一个大版本中,我的网站会有一个闪亮的新Title(也许只是一个h1标签),并有一个漂亮的蓝色字体(css样式)。但是这个大版本不需要JS代码。

我对HTML文件进行修改,当然还有CSS文件,然后我把它们都 "git添加 "到暂存区。因为它们都在暂存区,所以我现在可以把这两个文件都提交到暂存区,并在提交信息中给它们两个相同的标签,即这次提交 "添加了一个漂亮的蓝色标题"。

因此,如果没有暂存区,我可能无法将这两个文件打包在同一个提交消息中,但自从我将它们放在一起后,就更容易理解这两个文件的具体改动是为了网站上的新标题而做的。

是不是我的思路有问题?如果有任何想法,将不胜感激。

git staging
1个回答
1
投票

下面来了解一下如何来理解暂存区。我把它叫做 "索引"。

首先,一些名称。

  • 这个... 工作树 是你的文件 看到 在您的git控制的文件夹中。

  • 指数 是看不见的。

  • 回购 是一个无形的所有提交的集合。

好了,我们开始吧。

首先要理解的是 每次提交都包含了您的所有文件. 我的意思是,如果您已经提交了文件A、B和C,然后您只修改了C,并添加并提交,会有一种不好的倾向,认为结果是由 "只是C "或甚至 "只是由 变化 在C中"。这是错误的。提交是一个 完整 快照 的文件。

现在,当你 checkout 一个分支,它总是操作的开始。两种 事情发生了:分支结束时的提交内容被复制到了 索引和工作树,都是。 所以现在,你 看到 中的内容。指数 是一样的。如果该分支的最后一次提交中包含A、B、C的某一状态,现在工作树也是如此 索引也是如此。

所以现在我们已经准备好了编辑-添加-提交的循环。

  1. 你编辑了工作树中的一个文件(我们选择C)。这个文件有 没有 对指数的影响。

  2. 接下来,您 增加 该文件;现在 C 在索引中的样子与工作树中的样子一致,反之亦然。这就是 "添加 "的实际含义。

  3. 最后,你提交了,结果呢?Git 发现 仅在指数上. 它只是包裹所有这些文件,并快照他们,kaboom。这意味着A和以前一样,B和以前一样,C和以前一样,因为你做了个 add 的C在修改后的状态。

好了,现在我们体会到索引的作用了。它是你不断建立 下一次提交的内容.

请注意,索引可以不与工作树中的内容完全对应而提交。你可以修改C和D,然后 add 只有C和提交。现在D仍然在你的工作树中被修改。没问题! 这就是为什么在工作树上有一个叫做 殊荣 工作树和索引之间的关系。

所以,总结一下:你在工作树中工作。基于你的工作,你构建索引;你可以让它看起来和工作树一样,但不一定要和它完全一样。最后,你提交,这意味着你收尾了。恰恰 索引作为一个提交。然后你就可以开始了。


我也许应该补充一下:索引中的文件也是 追踪 文件。当你说 git status,git只是将索引的内容与工作树的内容进行比较,并将看到的内容分成不同的组。

  • 两地相同的东西 这些是 无痕 文件。但是 git status 不屑于提及这些,这也是为什么人们对什么是 "索引中的 "或什么是 "提交中的 "如此困惑。

  • 两处都有的东西,但又有所不同。这些是 修改、跟踪 文件。

  • 在一个地方存在而在另一个地方不存在的东西。Git 可能会根据不同的性质,将这些文件注释为未跟踪的文件、删除的文件等等。


0
投票

暂存区就像一个盒子,你把要提交(冻结)的东西放进去。

目的就是你所说的:在冻结之前,把所有的东西都装箱在一起。

注意,你现在可能会在暂存区中添加一些东西。编辑它。现在它将同时出现在暂存区和修改项中。你需要再次添加它。

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