gpt4 book ai didi

git - `stage` 之后的 `git add` 中是否存储了多个文件?

转载 作者:太空狗 更新时间:2023-10-29 14:42:32 29 4
gpt4 key购买 nike

据我所知,每次git add "filename"操作后,git都会创建一个对应的object,并恢复指向那个的指针index 中的对象

这是一个例子:

 touch a.txt 
git add a.txt//version 1
modify a.txt
git add a.txt//version 2

index中是否存在两个文件,分别对应version1和version2?还是只存在最新的version2?

index中的version1会不会被删除,只恢复version2?

最佳答案

只能从索引中访问添加的最新版本。

您可以使用 git ls-files --stage 检查索引中当前有哪些文件。

当你 git add something 时会发生什么,一个新的 blob 对象将被创建。然后从索引中引用该对象。因此,如果您添加更改,然后找到结果文件的 blob 哈希(例如通过 git ls-files --stage)并保留此 blob 哈希,那么您将能够找到即使索引被更新为给定文件记录不同的 blob,它也会这样做,直到它最终被垃圾收集。

一个例子:

创建包含内容 hello blob 的文件 foo 并将其添加到索引中。

$ echo "hello blob" > foo && git add foo

从索引中找到 blob 引用并显示 blob 内容。

$ git ls-files --stage | grep foo
100644 038f48ad0beaffbea71d186a05084b79e3870cbf 0 foo
$ git cat-file -p 038f48ad0beaffbea71d186a05084b79e3870cbf
hello blob

foo 的内容替换为 good bye blob 并将其添加到索引中。

$ echo "good bye blob" > foo && git add foo

从索引中找到 blob 引用并显示 blob 内容。

$ git ls-files --stage | grep foo
100644 d026852604f5986457e8867e2cb27b4cddb24e6f 0 foo
$ git cat-file -p d026852604f5986457e8867e2cb27b4cddb24e6f
good bye blob

原始 blob 仍然存在,直到它被垃圾收集。

$ git cat-file -p 038f48ad0beaffbea71d186a05084b79e3870cbf
hello blob

Documentation/technical/index-format.txt提供有关索引内部格式的更多信息。

关于git - `stage` 之后的 `git add` 中是否存储了多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49474035/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com