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

pnwntuvh  于 2023-02-07  发布在  Git
关注(0)|答案(7)|浏览(105)

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

* master
joes_work
refactoring
experiment

您将看到如下输出:

* master
    joes_work
    refactoring
        experiment

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

bgtovc5b

bgtovc5b1#

sehe的解决方案看起来很棒,下面是另一个看起来包含类似信息,但格式不同的解决方案,它使用git log,所以它也包含提交信息(忽略分支名称,我有点搞混了!):

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
disbfnqx

disbfnqx2#

我想完成@ctcherry的答案。
我喜欢同时看到提交的用户和日期,所以使用下面这行代码:

git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

但是这是一个很长的代码行,很难记住,所以你可以使用别名。你只需要在你的终端中使用它:
git config --global alias.lg "HERE GOES MY BIG LOG COMMAND LINE"
概括地说,请将下面一行复制并粘贴到您的终端上:

git config --global alias.lg "log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

然后,您只需使用git lg来获取日志历史树。
示例:

src

zpgglvta

zpgglvta3#

试试看

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
kkbh8khc

kkbh8khc4#

只需输入gitk命令并按回车键。
对我来说gitk是最简单的解决方案,虽然它不会显示命令模式,但它会自动填充一个漂亮的UI,如下所示:

igsr9ssn

igsr9ssn5#

从git的Angular 来看,分支不是这样工作的,如果我对分支a进行一些提交,然后创建分支b,在那里工作,然后在a上做其他工作:

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

如果你用相反的方法,这是无法区分的:

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

我能想到的唯一方法是找到某个分支来自哪个分支,但这是不可靠的(超过90天的条目通常会被删除)。

z5btuh9x

z5btuh9x6#

我只是做了一个非常简单的CLI,并把它放到brew,因为我找不到任何类似的东西,只有几行在go:https://github.com/mucansever/gittree

jtw3ybtb

jtw3ybtb7#

您的.gitconfig的以下别名如何:

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

您还可以根据tree命令支持的内容给予选项,例如-D表示时间戳。

相关问题