Git临时区域只是一个索引吗?

nop*_*ole 20 git git-index

Pro Git这本书说,暂存区域只是一个列表或索引,它表示在git commit完成后将提交哪些文件,现在这个名称index通常被称为"暂存区".

但是,如果我们修改foo.txt已经是repo的一部分的文件,并使用git add foo.txt它来暂存它,并再次修改该文件,那么现在该文件既可以"暂存"又可以"修改"(如图所示git status),如果我们提交,则"staged"版本将进入提交.第二次编辑不会进入.

那么,如果它只是一个索引 - 文件列表,那么"暂存区"如何跟踪第一次编辑的内容?

man*_*lds 13

索引是可以提交的工作目录的视图.它可以被视为预提交状态,并不像"文件列表"那么简单.执行此操作时git add,文件(带有更改)将添加到索引中,直到您添加它们之后才会看到更新的更改.

  • 这是一个很老的问题,但我仍然找不到*暂存区域和索引是否相同*?的答案。因为,在我查找的任何地方,它都显示“git add”实际上将文件添加到索引中,并且“git add”将文件放入暂存区域(文件在提交之前获取的区域)。那么,“索引”和“暂存区”概念是否相同?我认为弄清楚术语以及这两个术语之间的差异(如果有的话)非常重要。 (3认同)

Phi*_*ley 5

index就像一篮子已完成的工作。在任何时候,您都可以add将(部分)已完成的文件添加到该输出篮中,它将用您当前的副本替换之前的副本,以便当您最终决定时commit,它将使用该输出篮(当前index)的内容来创建犯罪。

此外,您之前add将在 repo 中创建一个 blob 对象,如果需要,可以通过各种日志找到该对象。一段时间(30 天以上)后,它将消失gc

  • @EthanDavis,分期在很大程度上与索引相同。差异更多的是视角上的差异。暂存区域是用户的概念视图,而索引更多的是 Git 开发人员的观点(他们保留“暂存区域”中内容的列表)。Git 有很多由开发人员命名(并为开发人员命名)的东西,这些东西随后会被用户误解;-) (3认同)
  • 我喜欢你的**出篮**的例子,但你根本没有提到这与分期有何关系 (2认同)