0

我们可以恢复曾经添加(但未提交)然后使用 git reset --hard 删除的文件。请参阅执行 git reset --hard HEAD^ 后恢复添加的文件

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

背景:在进行任何开发时,我偶尔会对更改的文件执行 git add 操作,但不要提交它们。这一次,我使用一些关键的 api 凭据进行了 git add,我想知道如果我要开源 repo/gem 是否可以从日志中恢复它们。

4

2 回答 2

1

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

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

于 2013-08-26T08:55:07.620 回答
0

Git 只传输相互链接的对象,从一些提交对象开始。

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

因此,只有从根树对象可到达的对象才会与引用该树对象的提交一起传输;这是针对传输到远程存储库的每个提交完成的。根据定义,悬空对象是不可访问的,因此它们不会被转移。

于 2013-08-26T09:40:35.533 回答