我有时有一些相关的特征分支,有些是在其他方面建造的,例如
o feature-B
/
/
o--o feature-A
/
/
master o
o feature-C
我想显示一个图表,显示哪些分支取决于哪个分支,但是很难获得git log --graph
来产生我想要的东西。
以下未能显示分支之间的关系。
$ git log --graph --format='%h%d' ^master feature-{A,B,C}
* 801ecee208 (HEAD -> feature-B)
* e568acd804 (feature-A)
* f49ecc9e28
* a42d73d4bc (feature-C)
将^master
更改为^master~
改善了事物,但迫使我包括一个我不在乎的提交(origin/some-earlier-branch
)。
$ git log --graph --format='%h%d' ^master~ feature-{A,B,C}
* 801ecee208 (HEAD -> feature-B)
* e568acd804 (feature-A)
* f49ecc9e28
| * a42d73d4bc (feature-C)
|/
* 67cf54dd0e (master)
* 40b72ecc6a (origin/some-earlier-branch)
那非常接近我想要的东西,尽管省略最后一行会很不错。
我真正要获得的是一种清单清单,哪些分支取决于其他分支。像
feature-A -> master
feature-B -> feature-A
feature-C -> master
因此我可以生成依赖项的GraphViz图。
这些实际上不是依赖项(尽管这可能对您的目的无关紧要)。
例如:
,请考虑此简短变体 o <-- foo
/
o
/
o <-- master
现在,我们使用git branch bar foo~1
添加分支标签bar
:
o <-- foo
/
o <-- bar
/
o <-- master
说 foo
"取决于" bar
),当 bar
可以随时眨眼和外出时,这似乎很奇怪。取而代之的是,您需要的东西会在您构建图表时会告知您的思维 - 将其视为" foo
共享可与bar
的可及以达到的命令"。也就是说,您想要的是列出提交列表及其父ID,然后将各种ID相关联。如果某些ID是从 A分支提示a,b和c的 comport的,则可以与这三个分支名称共享其原因。
现在您只需要生成两个列表:
- 每个分支提示的哈希ID和
- 每个分支提示的每个提交的哈希ID ,不包括可排除的任何名称(例如
master
)
的所有提示。
例如,这应该这样做(我尚未对其进行测试):
for name in $names; do
echo $name $(git rev-parse $name)
done
echo --
git rev-list --parents $names --not $exclude
第一组线路,直至--
,为分支提示提供了名称对ID映射(当然,假设$names
中的所有名称都是有效的)。在--
到EOF之后的第二组线路为您提供了犯罪ID,然后为所有父母的IDS提供了该提交的ID(一个用于常规提交,两个或更多用于Merge Consits,而没有父母来root wissits)。--not $exclude
确保您无法从$exclude
中的名称列表中获得任何提交。
请注意,多个分支名称可能指向一个分支提示,如果所有分支提示都在"或后面",则ID集的第二个列表可以为空。
<。