在命令行显示分支层次结构?

我很好奇,如果有一种方法来在命令行上显示分支层次结构? 例如,如果我使用git branch ,而不是像这样看到输出:

 * master joes_work refactoring experiment 

你看到这样的输出:

 * master joes_work refactoring experiment 

这样很容易看出哪个分支是分支的。 即使没有输出树结构的特定命令,是否有输出哪个分支来自哪个分支的信息的命令? 我可以使用perl脚本来格式化输出。

sehe的解决scheme看起来不错,这里是另一个似乎包含类似信息,格式不同,它使用git日志,所以它也包含提交信息(忽略分支名称,我有点搞砸了!):

 git log --all --graph --decorate --oneline --simplify-by-decoration * ae038ad (HEAD, branch2-1) add content to tmp1 | * f5a0029 (branch2-1-1) Add another |/ * 3e56666 (branch1) Second wave of commits | * 6c9af2a (branch1-2) add thing |/ * bfcf30a (master) commit 1 

尝试

 git show-branch git show-branch --all 

示例输出:

 bash$ git show-branch --all ! [branchA] commitA only in branchA * [branchB] commitB ! [branchC] commitC only in branchC --------------------- + [branchA] commitA only in branchA * [branchB] commitB + [branchC] commitC only in branchC *+ [branchC~1] commitB-1 also in branchC *+ [branchC~2] commitB-2 also in branchC +++ [branchC~3] common ancestor +++ [branchC~4] more common ancestors 

从git的angular度来看,这不是分支机构的工作方式。 如果我做了一些提交分支a ,从它创build分支b ,在那里工作,然后做一个其他的工作:

 A -- B -- D <-- a \ \ C <-- b 

如果你反其道而行之,这是无法区分的:

 A -- B -- C <-- b \ \ D <-- a 

我能想到的从哪个分支发现某个分支的唯一途径是reflog,但那是不可靠的(通常删除超过90天的条目)。

如何为您的.gitconfig这个别名:

 [alias] branch-tree = !cd "$(git rev-parse --git-dir)/refs/heads" && tree 

您也可以提供选项,具体取决于您的tree命令支持的内容,例如用于时间戳的-D