我们怎样才能提到一个提交的孩子?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我们怎样才能提到一个提交的孩子?相关的知识,希望对你有一定的参考价值。

给定分支名称或标签name,我们可以通过name~1引用其父级。我们能以某种方式提及其中一个孩子吗?

谢谢。

答案

作为chepner said,信息不是直接可用的,因为Git只存储向后链接。父子提交在其子项创建时始终存在,但在创建父项时其子项不存在。一旦创建了一个提交,就不能改变它的任何内容,所以没有办法将它连接到它的子节点。

尽管如此,如果你有一个方向,你可以找到那个方向的孩子。这就是我的意思:假设图形如下所示:

          B--D--E   <-- branch1
         /
...--o--A
         \
          C--F--G   <-- branch2

并且,假设您现在在爪子中拥有提交A的名称或哈希ID。您可以通过在“branch1”方向上从B搜索来找到commit A的哈希ID,并通过从“branch2”方向搜索C来查找commit A的哈希ID。为此,请使用:

git rev-list --reverse --topo-order --ancestry-path A..branch1

这将按顺序列出提交BDE的哈希ID。用branch1替换branch2,按顺序获得CFG

请注意,如果图形如下所示:

          B--E   <-- branch1
         /  /
...--o--A--D
         \
          C   <-- branch2

你可以在B方向首先获得DA..branch1。要检查这种情况,而不是(或除了)使用--topo-order和/或--reverse,收集沿此祖先路径的所有提交,并为每个这样的提交,检查所有提交的父项:

ahash=$(git rev-parse A^{commit}) # in case A is a branch or tag name, for instance
for hash in $(git rev-list --ancestry-path $ahash..branch1); do
    if git rev-parse $hash^@ | grep -q $ahash; then
        echo $hash is a child of $ahash
    fi
done

(此代码未经测试)。

另一答案

Git存储库表示为提交的DAG(有向,非循环图)。每个提交包括一个指向其每个父项的指针,但没有关于哪些提交将其作为父项的信息。这就是为什么你只能引用一个提交的父母(name~1name~2等),而不是那些将name作为父母的提交。

(大多数提交都有单个父级,但合并提交是具有2个或更多父级的提交的示例,具体取决于合并中涉及的分支数量。)

以上是关于我们怎样才能提到一个提交的孩子?的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能将数据放在火力库中的孩子之外,我遇到的问题看起来像这样

怎样跟女孩聊天才能让她和你有说不完的话呢?

Prisma:我怎样才能让所有孩子都处于某种状态?

使用 BeautifulSoup 获取标签的孩子数

怎样才能长高 让孩子快速长高的好方法

我怎样才能让 Flexbox 孩子 100% 的高度是他们的父母?