some.txt git add some.txt -- objects -- f2 (blob "hello") echo hola-6ren">
gpt4 book ai didi

git - "git add"之前的多个 "git commit"

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

这是我的实验。

git init
echo hello > some.txt
git add some.txt

-- objects
-- f2 (blob "hello")

echo hola > some.txt
git add some.txt

-- objects
-- f2 (blob "hello")
-- 53 (blob "hola")

git commit -m "..."

-- objects
-- f2 (blob "hello")
-- 53 (blob "hola")
-- 5c (tree
"some.txt" -> 53)
-- 61 (commit "tree 5c")

正如我们所见,每个“git add”都创建了 blob 对象,并且“git commit”提交了最后一个 blob 53。

但请注意,中间 blob“f2”仍在存储库中。这有什么理由吗?我该如何使用这个 blob?或者我该如何删除它?

最佳答案

Whee 花了我一分钟时间才明白你在问什么 :)

Git 至少会在一段时间内保存所有内容。如果你跑

git fsck

你应该看到

dangling blob f2...

这是 git 的一种设计,让未引用的东西搁置一段时间。这个想法是,如果您“哎呀”了一些东西,该文件仍然可以找到。这也是一种“惰性优化”,其中添加一些内容可以将提交状态保存为内容寻址文件,而提交一些内容只是建立对这些内容的引用。清理部分是分开的。您应该查看 git prune 的文档和 git gc .

默认情况下,它会在至少 2 周后运行的 git gc 中得到清理。此外,git reflog 的效用(通常用于挽救搞砸一切的提交和 rebase )在积极清理的情况下会丢失。

关于git - "git add"之前的多个 "git commit",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1341675/

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