需要从提交列表中标识最新的提交ID(sha)

时间:2017-10-28 14:23:05

标签: git

我有一个配置文件,其中提到了单个存储库的多个提交ID。现在我需要确定列表中的最新提交。

1)从提交历史中识别最新提交? 2)最新提交不应该基于日期,它应该基于远程仓库中的提交顺序/历史记录。

示例:A-> B-> C-> D(这里D是最新提交)。

2 个答案:

答案 0 :(得分:1)

您只能使用

获取列表中不属于他人祖先的那些
git show-branch --independent A B C D

并在您的示例图表中仅显示D.如果图表看起来像

A---C---D
 \
  B

它显示D和B.

答案 1 :(得分:0)

如果您有存储库 - 即。,所有提交 - 您可以确定祖先。请记住,每个提交哈希ID都会定位提交对象,并且提交对象本身包含其父提交的哈希ID(或者对于合并,父 s ,复数)。但这并不一定能得到你想要的答案,具体取决于你想要的答案。

例如,考虑以下提交图,其中包含六个提交哈希ID(我们缩短为一个字母):

A   <- B   <- C
 \
  D  <- E   <- F

这里提交C的父级是提交B; B的父级是A; F的父级是E; E的父级是D; D的父级也是A

使用存储库和命令行工具,我们可以执行成对测试,例如:&#34;提交A是提交E的祖先?&#34; git merge-base命令直接使用--is-ancestor实现此操作,git merge-base --is-ancestor A E && echo A is an ancestor of E 测试第一个命名提交是否是第二个命名提交的祖先(可以从其中访问)。例如,运行:

git merge-base

会告诉我们A确实是E的祖先。

(从技术上讲,A A提供&#34;先行或等于&#34;测试,即A≼E:如果我们使用E Egit merge-base --is-ancestor B E || echo B does not come before E git merge-base --is-ancestor E B || echo E does not come before B 执行此操作,则声称提交是它自己的祖先。我们可以通过直接比较哈希来测试身份,所以它对我们这里的目的并不重要,但它值得记住。)

但是,此关系仅建立部分订单。 &#34;是祖先&#34;不服从trichotomy law因此不会产生totally ordered set。所以:

Warning messages:
1: In model.response(mf, "numeric") :
  using type = "numeric" with a factor response will be ignored
2: In Ops.factor(y, z$residuals) : ‘-’ not meaningful for factors

这会告诉我们B⋠E,但同时E⋠B。

更一般地说,我们可以说应用于一组提交的partial order operator ≼仅提供partially ordered set。这是jonrsharpe's comment的longwinded(在数学上更精确)版本。只有在某些情况下 - 当所有输入提交都通过其祖先链相关时 - 是否只有一个总订单;只有在那种情况下才真的有#34;最新提交&#34;。