悬挂git add blob是否被推送到主存储库?

时间:2013-08-26 08:52:51

标签: git github git-reset git-dangling

我们可以恢复曾经添加(但未提交)的文件,然后使用git reset --hard删除。 见Recovering added file after doing git reset --hard HEAD^

当我们将更改推送到某个上游存储库时,这些blob是否也被推入?

上下文:在进行任何开发时,我偶尔会对已更改的文件执行git add,但不提交它们。这一次,我做了一些带有一些关键api凭证的git添加,我想知道如果我要开源repo / gem,是否可以从日志中恢复。

2 个答案:

答案 0 :(得分:1)

不,未提交(或明确推送)的blob绝不会通过网络传输。

如果您添加了文件但从未提交,则应在下次调用git gc时将其删除。如果您提交了它们,然后再次删除了提交(例如通过git rebase或git reset),它们将不会被收集,因为它们可以通过Git的reflog访问。但是,reflog是一种本地机制,不会与git push一起发布。

答案 1 :(得分:0)

Git只会将对象链接彼此传输,从一些提交对象开始。

由于只能推送 commit 对象(无论您是使用SHA-1名称直接命名还是通过brahch或标记名称间接命名),Git都会传输提交,并且每个提交引用一个对象,表示存储库的根,它本身引用 blobs (表示单个文件的内容)和其他树。

因此,只有来自根树对象的可达对象才会与引用该树对象的提交一起传输;这是为每个传递到远程存储库的提交完成的。根据定义,悬空物体无法到达,因此不会转移它们。