6

当在其父提交图中没有包含它们的标记或分支时,将创建孤立提交。例如,如果您创建一个分支foo,添加提交ab,然后删除该分支(即foo从提交中删除引用b),那么除非您保存了它们的哈希值,否则两者都ab无法访问。

x-x-x-x   <- master
     \
      a-b  <- foo (reference then deleted or reset to somewhere on master)

孤立提交的基本 Git 行为是最终垃圾收集并删除它们(我听说默认值至少为 30 天)。

我的问题是这样的:

git cloneGit 是否会使用、git fetchgit push命令将孤儿提交从一个 repo 移动到另一个 repo ?

或者对于任何不直接调用孤儿哈希的操作(例如checkoutor cherry-pick),Git 是否有效地忽略了这些提交?

4

1 回答 1

6

在正常的 Git 工作流程中,这些提交将被忽略。这包括git clonegit pushgit fetch。但是根据 Git 存储库托管服务器,如果需要,您可能可以将它们拉回您的存储库中。

这就是我在“ Github 记得提交 ID 吗? ”中描述的:通过GitHub 事件 API,您可以取回(例如)已删除分支的 SHA1,并以这种方式在您自己的 repo 中恢复它。

这弥补了 agit reflog在远程端通常不可访问/公开的事实。

于 2017-10-14T09:32:59.757 回答