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

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

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

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


当前回答

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

其他回答

我想分享我的git日志命令的压缩预设: (绿色是我的默认控制台颜色)

它被设计成尽可能紧凑和像表格一样(没有增加任何多余的空间),同时仍然有信息和易于阅读。这基本上是Git默认使用的中型格式的压缩版本。

特点:

固定物品位置; 提交哈希和引用名称的默认颜色; 提交作者日期为本地时区; 提交消息被包装成128个字符并缩进; 扩展提交消息也会显示(如果有的话),并删除任何尾随换行符。


您可以使用以下命令将其添加到配置文件中: (注意他们会改变所有git日志格式的日期格式!)

$ git config --global log.date 'format-local:%d %b %Y %H:%M'
$ git config --global pretty.compact '%C(auto)%h %C(cyan)%<(17,trunc)%an%C(auto) %D%n        %C(cyan)%ad%C(auto) %w(128,0,26)%s%w(0,0,26)%+b%-(trailers:key=FAKE)'

... 然后像这样使用它(使用——graph,——all或任何其他选项):

$ git log --graph --pretty=compact

如果你也想让它默认,你可以用这个命令:

$ git config --global format.pretty compact

或者如果你喜欢别名:

$ git config --global alias.logc "log --date=format-local:'%d %b %Y %H:%M' --pretty='%C(auto)%h %C(cyan)%<(17,trunc)%an%C(auto) %D%n        %C(cyan)%ad%C(auto) %w(128,0,26)%s%w(0,0,26)%+b%-(trailers:key=FAKE)'"

如果您想做任何更改,请参阅git日志参考的PRETTY FORMATS部分。

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

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

git log --graph --decorate --oneline

对于Linux来说,Gitg是一个很棒的工具,类似于OS x的Gitx。只需在命令行上从存储库的树结构中某处运行' Gitg '(与Gitx相同)。

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