我在自己的机器上单独使用Git,我发现很难维护所有分支和提交的心理模型。我知道我可以通过git日志查看提交历史,但是有没有一种方法可以查看整个分支地形,就像这些ASCII映射一样,似乎到处都在用它来解释分支?

      .-A---M---N---O---P
     /     /   /   /   /
    I     B   C   D   E
     \   /   /   /   /
      `-------------'

感觉就像有人来找我的存储库时,很难弄清楚到底发生了什么。

我猜我是受到了AccuRev的流媒体浏览器的影响…


当前回答

使用git log——graph或gitk。(两者都接受——all,这将显示所有分支,而不仅仅是当前的分支。)

对于分支名称和紧凑视图,尝试:

git log --graph --decorate --oneline

其他回答

我已经试过了——通过装饰来简化,但我所有的合并都没有显示出来。因此,我只是删除了头部没有“\”和“/”符号的行,而始终保留带有“(”的行,表示紧接着的分支。在显示分支历史记录时,我通常对提交注释不感兴趣,所以我也删除了它们。我最终得到了下面的shell别名。

gbh () { 
    git log --graph --oneline --decorate "$@" | grep '^[^0-9a-f]*[\\/][^0-9a-f]*\( [0-9a-f]\|$\)\|^[^0-9a-f]*[0-9a-f]*\ (' | sed -e 's/).*/)/'
}

Gitk的输出有时让我读起来很痛苦:

这促使我编写了GitVersionTree:

还有Tig。它不像“BranchMaster”那样折叠树枝,但是……

它是快速的,在终端运行。

因为它是如此之快(+键盘控制),你得到一个伟大的用户体验。它几乎就像我的“ls”,用于包含Git存储库的目录。

它有常用的快捷方式,/搜索等。

(PS:这是屏幕截图背景中的终端。现在看起来好多了,但是我的电脑拒绝截屏,对不起)

(PPS:我也使用GitKraken,它有非常清晰的可视化,但它比Tig重得多)

看看GitKraken——一个跨平台的GUI,它以清晰的方式显示拓扑。

这里有一个关于一些高级功能的快速视频教程。

注:需注册。

我99.999%的时间用gitlg来查看历史,0.001%用gitlog来查看历史。

我只是想分享两个可能有用的日志别名(从.gitconfig配置):

[Alias]
     lg = log --graph --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
     hist = log --graph --full-history --all --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short

Git lg将看到当前的分支历史记录。 Git hist将看到整个分支历史。