[英]List commits that are reachable by following the parent links from the given commit (like `git rev-list`)
[英]Git show all reachable commits at distance n from a given commit
是否有命令显示以给定提交为中心的深度为n
的提交子树?
换句话说,给定以下提交树
A +-> B +-> C +-> D
| |
| +-> E +-> F
|
+-> G
git ??? --depth 1 C
git ??? --depth 1 C
应该返回B, C, D
git ??? --depth 2 C
git ??? --depth 2 C
应该返回A, B, C, D, E
理想情况下,输出应格式化为git log --oneline --graph
的输出。
您必须为此编写自己的程序。
这对计算很重要,因为 Git 的提交链接只会向后移动。 您已经绘制了向前链接在一起的提交(实际上也有相同的困难,但解决问题需要知道箭头的方向)。 也就是说,实际的链接集是这样的:
G-> A
F-> E
E-> B
D-> C
C-> B
B-> A
如果您的图中有任何合并提交,则合并提交将有多个弧。 例如,给定:
...--J
\
M <-- somebranch
/
...--L
合并提交M
有两个输出弧,将其连接到提交J
和L
(按此顺序)。
您将需要运行git rev-list --parents
,为其提供开始(结束?)点提交,您希望从该点开始让 Git 向后工作。 这将发出每个可访问提交的哈希 ID,从这些起点开始,并包括同一行上每个提交的父哈希 ID。 如果要使用所有引用作为起点,请使用git rev-list --all
; 如果要使用所有分支名称,但不使用标签名称作为起点,请使用git rev-list --branches
; 如果您想要所有标签名称但没有分支名称,请使用git rev-list --tags
; 等等。 有关更多详细信息,请参阅git rev-list
文档。
(你可能想知道哪些提交是起点提交。如果是这样,你需要一些额外的工作,比如使用git for-each-ref
来梳理引用。完成后,你可以给git rev-list
原始哈希 ID,而不是使用--branches
或--tags
或--all
或其他任何东西。)
请注意,分支合并可能会为您提供如下图:
H-----I
/ \
...--G M--N--...
\ /
J--K--L
这样提交G
既是从M
后退三步(沿顶部),又是从M
后退四步(沿底部)。 因此,它从N
后退 4 步和 5 步,依此类推。 您想如何处理这取决于您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.