在没有克隆的情况下在git中获取倒数第二个提交的sha1

时间:2016-05-30 07:32:56

标签: git github

我想在没有克隆的情况下从存储库中获取第二个最后一次提交。目前我正在使用git ls-remote <repo> <branch> | cut -c1-7。这有助于我在不克隆存储库的情况下获取最新提交的sha1。我可以用某种方式或任何其他命令来获取第二次提交吗?

1 个答案:

答案 0 :(得分:0)

一般来说,这是不可能的。

在特定情况下可能会这样。

让我们定义一些术语,以便本讨论的其余部分有意义:

  • B 是您感兴趣的分支机构名称,即您正在运行git ls-remote remote B
  • B 是从 B 获得的身份(SHA-1哈希),即分支上的提示。< / LI>
  • &#34;倒数第二&#34; commit是 I B 的父级。如果 B 是合并,它是第一个父母(你没有指明这个,但它似乎是一个合理的假设;如果它是错的,对下面的过程做出你喜欢的任何改变。我们将此ID W 称为&#34;想要&#34;。

您的任务是识别 W

如果没有协助或(可能是浅层)克隆,您无法做到这一点。如果你有一个克隆,找到 W 是微不足道的:git rev-parse B^产生 W 。 (如果克隆很浅,那么深度为2或更多就足以找到 W 。)如果你没有克隆,你必须以某种方式让遥控器给你 w ^

如果您的遥控器提供了一个Web界面,那么您可以阅读提示提交,从而找到其父ID。它甚至可以有一个实际的API(REST接口或其他),您可以通过它遍历提交图,为其提供 I B 并获取父ID列表。但除了克隆之外,没有标准接口。

请注意,如果您创建分支 B 深度2的单分支浅克隆,那么将提交 I B 并且所有它的父母,包括 W 。因此,这是做最少量工作的明显方法,但保证能够找到 W 。但这涉及制作一个你已经排除的克隆。

修改:我刚刚意识到它还有一个github标记,因此您可能会专门询问 有关github的信息。在github的案例中, 是一个API,您只需obtain information about IB directly