我有一个配置文件,其中提到了单个存储库的多个提交ID。现在我需要确定列表中的最新提交。
1)从提交历史中识别最新提交? 2)最新提交不应该基于日期,它应该基于远程仓库中的提交顺序/历史记录。
示例:A-> B-> C-> D(这里D是最新提交)。
答案 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 E
或git 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;。