我想知道是否有一种有效的方法来检索给定提交的子项. 尽管在 Referencing the child of a commit in Git讨论了一种方法,但效率非常低. 我认为这在Git将是一件很简单的事,但显然不是这样. 问候
尽管在 Referencing the child of a commit in Git讨论了一种方法,但效率非常低.
我认为这在Git将是一件很简单的事,但显然不是这样.
问候.
git rev-list可以显示孩子,但这些孩子必须可以从您提供的提交到达.假设您希望显示所有分支机构的所有孩子,您可以使用类似的东西git rev-list --all --not $COMMIT^@ --children | grep "^$COMMIT"
这应该输出一个看起来像这样的行
$COMMIT $child1 $child2 $child3 ...
为方便起见,您可以将命令添加到git别名中:
children = "!f() { git rev-list --all --not $1^@ --children | grep $(git rev-parse $1); }; f" # reachable children of a ref
语法$COMMIT ^ @可能会令人困惑,所以我会解释一下.希望$COMMIT是不言自明的.这之后是^ @,它扩展到引用提交的所有父节点.所以$COMMIT ^ @表示“$COMMIT的所有父母”.因为这是–not标志,所以指示rev-list在命中$COMMIT的任何父项之后停止处理.这基本上只是一个优化,因为从$COMMIT可访问的任何提交都不可能是一个小孩.
注意:以前的版本的这个答案说tail -1而不是grep“^ $COMMIT”.这可能是一个简单的测试回购(这就是我最初说的原因),但是如果你有任何不包含$COMMIT的分支,那么git rev-list将不会保证最后发出$COMMIT.