0

我试图了解 git 索引文件是如何工作的。

我有一个包含一些文件的本地存储库,其中之一是test.txt. 我正在提交X并将该提交的索引文件保存到临时目录。

然后我编辑test.txt添加并提交了它,它创建了 commit Y。之后,在从 commit 重置为 commit 后,我​​运行git reset --hard X并保存了 commit 的索引文件。XY

然后我比较了两个索引文件(从 commitX和从 commitX重置后的 commit Y),它们并不相同。怎么会这样 ?文件中有时间戳吗?据我所知,索引应该已重置为其以前的内容(?)

4

2 回答 2

2

之后我跑了git reset --hard X

就是这样做的:索引条目具有签出内容的哈希码以及工作树中生成的文件系统时间戳。当您这样做时git reset --hard,它会更新工作树,因此这些文件具有相同的内容,但比之前签出相同内容的时间戳更新。

于 2020-04-09T12:40:35.020 回答
1

索引文件是什么样的有什么关系?重要的是它列出的文件的版本。您可以通过ls-files.

例子:

$ git init
$ echo "howdy" > howdy.txt
$ git add .
$ git commit -m "root"
$ echo "bonjour" >> howdy.txt
$ echo "byebye" > byebye.txt
$ git add .
$ git commit -m "first"
$ git ls-files --stage
100644 3abe061d90cd975b4bef1fa702caec7c0f320b29 0   byebye.txt
100644 e1f6537eb149ccead2e53cbf2da40291c07d904a 0   howdy.txt

好的,这些是索引的“内容”。现在让我们进行更改和新的提交:

$ echo "extra line" >> howdy.txt
$ git add .
$ git commit -m "second"
$ git ls-files --stage
100644 3abe061d90cd975b4bef1fa702caec7c0f320b29 0   byebye.txt
100644 1ad49f2d780a4b46f68dd9bb1571c65ffc1dc660 0   howdy.txt

现在让我们重置:

$ git reset --hard HEAD^
$ git ls-files --stage
100644 3abe061d90cd975b4bef1fa702caec7c0f320b29 0   byebye.txt
100644 e1f6537eb149ccead2e53cbf2da40291c07d904a 0   howdy.txt

如您所见,索引与它原来的索引“相同”,这是唯一重要的意义。

于 2020-04-09T12:29:30.070 回答