【问题标题】:Multiple "git add" before "git commit"在“git commit”之前有多个“git add”
【发布时间】:2010-11-23 10:09:10
【问题描述】:

这是我的实验。

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?或者我怎样才能删除它?

【问题讨论】:

    标签: git commit add


    【解决方案1】:

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

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

    git fsck
    

    你应该看到

    dangling blob f2...
    

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

    默认情况下,它会在至少 2 周后发生的 git gc 运行中得到清理。此外,git reflog 的实用性(通常用于挽救把所有事情搞砸的提交和变基)在积极清理的情况下会丢失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 2021-08-10
      • 2017-12-30
      • 2014-09-11
      相关资源
      最近更新 更多