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

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

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

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


当前回答

我使用以下别名。

[alias]
    lol = log --graph --decorate --pretty=oneline --abbrev-commit
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all

它在配色方案中比我上面看到的别名有更多的信息。它似乎也很常见,所以你可能有机会在别人的环境中存在,或者可以在对话中提到它而不需要解释。

在Git lola中有截图和完整的描述。

其他回答

我发现全局图很有用。

它使用dot/Graphviz创建了漂亮的2D图形,而不是gitk和朋友生成的相当线性的“一维”视图。使用-i选项,它显示分支点和合并提交,但省略了中间的所有内容。

我通常用

git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"

使用颜色(如果你的shell是Bash):

git log --graph --full-history --all --color \
        --pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"

这将像这样打印基于文本的表示:

* 040cc7c       (HEAD, master) Manual is NOT built by default
* a29ceb7       Removed offensive binary file that was compiled on my machine and was hence incompatible with other machines.
| * 901c7dd     (cvc3) cvc3 now configured before building
| * d9e8b5e     More sane Yices SMT solver caller
| | * 5b98a10   (nullvars) All uninitialized variables get zero inits
| |/
| * 1cad874     CFLAGS for cvc3 to work successfully
| *   1579581   Merge branch 'llvm-inv' into cvc3
| |\
| | * a9a246b   nostaticalias option
| | * 73b91cc   Comment about aliases.
| | * 001b20a   Prints number of iteration and node.
| |/
|/|
| * 39d2638     Included header files to cvc3 sources
| * 266023b     Added cvc3 to blast infrastructure.
| * ac9eb10     Initial sources of cvc3-1.5
|/
* d642f88       Option -aliasstat, by default stats are suppressed

(你可以只使用git log——format=oneline,但它会将提交消息绑定到数字,这看起来不太漂亮)。

要为该命令创建快捷方式,您可能需要编辑~/。gitconfig文件:

[alias]
  gr = log --graph --full-history --all --color --pretty=tformat:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s%x20%x1b[33m(%an)%x1b[0m"

然而,正如Sodel the Vociferous在评论中指出的那样,这么长的格式化命令很难记住。通常,这不是问题,因为你可以把它放在~/。gitconfig文件。然而,如果你有时不得不登录到远程机器,而你不能修改配置文件,你可以使用一个更简单但更快的输入版本:

git log --graph --oneline

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

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

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

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

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

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

Mac用户可以试试免费的开源工具GitUp。

我喜欢这些图表的显示方式。它比我见过的其他工具更清晰。

该项目位于GitHub。

如果你使用的是OS X系统,Gitx也是一个很棒的可视化工具。