我有一个Git别名,可以有效地运行以下命令:
git log \
--graph \
--simplify-by-decoration \
--ancestry-path \
--format='%d' \
$(git for-each-ref \
--contains=@ \
--format='%(refname)' \
refs/heads \
| xargs -I{} echo @..{} \
)
此命令呈现一个分支树,它是HEAD
的后代。例如
* (origin/branch-C2, branch-C2)
| * (origin/branch-C1, branch-C1)
|/
* (origin/branch-B, branch-B)
* (origin/branch-A, branch-A)
这实际上是一种从当前提交中获取分支树的有用方法。使用rev-list
可以完成类似的结果(但是我发现使用commit SHA-1
时使用起来有点困难并且无法摆脱--format
:
git rev-list --graph --simplify-by-decoration --ancestry-path --oneline \
$(git for-each-ref --contains=@ --format='%(refname)' refs/heads | xargs -I{} echo @..{})
以上输出对于人类阅读很有用,但我想以某种方式修改上面的输出,以便更容易解析,这样树可以表示本地分支与之相关的方式彼此。例如,像这样:
branch-A
-branch-B
--branch-C1
--branch-C2
(请注意,示例中没有远程/上游分支。)
我不确定Git中是否有类似的内容,但可以{@ 1}}或git log
以某种方式进行配置,还是应该使用棘手的git rev-list
命令组合生产这样的分支树?我相信我自己可以使用shell脚本实现这样的过滤器,但是让我先检查一下Git。
也许这个问题应该发布在unix.stackexchange.com上。