【问题标题】:Do dangling git add blobs get pushed to master repository?悬空的 git add blobs 是否被推送到主存储库?
【发布时间】:2013-08-28 17:05:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: git github git-reset git-dangling


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-22
        • 2010-12-05
        • 2011-03-14
        • 1970-01-01
        相关资源
        最近更新 更多