Git 会克隆、获取或推送孤立提交吗?

Lig*_*tCC 5 git git-push git-fetch git-clone orphan

当父提交图中没有包含它们的标签或分支时,就会创建孤立提交。例如,如果你犯了一个分支foo,添加提交ab,然后删除分支(即删除引用foo从提交b),那么这两个ab,除非你救了他们的哈希值将是不可到达的。

x-x-x-x   <- master
     \
      a-b  <- foo (reference then deleted or reset to somewhere on master)
Run Code Online (Sandbox Code Playgroud)

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

我的问题是这样的:

将以往的Git从一个回购移动孤儿提交到另一个使用git clonegit fetchgit push命令?

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

Von*_*onC 5

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

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

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