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

标签 git commit add

这是我的实验。

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/

相关文章:

git - 在进行初始提交之前在索引中查找添加的文件

windows - Git Status 使用 Cygwin 挂起

git rebase "deleted by us"和 "deleted by them"

git - 有选择地推送已经添加和提交的文件

java - 使 ArrayList 大小等于 Java 中可用的其他数组列表

python:反转影响运算符的魔术方法的元素

xcode - 如何从特定分支安装 pod?

git - 如何取消提交 git 裸存储库中的最后一次提交?

SVN更新总结

git - 为什么 git 会修改我的文件?我该如何撤消它?