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

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

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

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


当前回答

一个很好的基于web的工具是ungit。它可以运行在Node.js和Git支持的任何平台上。有一个视频是关于它是如何为那些发现这类事情比阅读更容易的人工作的……

其他回答

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

我通常用

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

另一条git日志命令。这是一个固定宽度的列:

git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short

样例输出:

Git内置的工具(没有附加组件)具有日期时间格式

现有的答案都没有显示如何使用内置的git日志工具更改日期-时间格式。由于文档对这个特性有点迟钝,我添加了两个别名作为示例。

git树-所有提交的时间戳日志

# Tools for analyzing the merge history of a repo using tree-like graphics
[alias]
    tree = log --no-show-signature --graph --date=format-local:%H:%M:%S --all \
        --pretty="'%C(#ffe97b ul)%h%C(reset) %C(#568ea6)%cs %C(#305f72)%cd%C(reset)%C(auto)%d%C(reset) %s %C(yellow)(%C(reset)%C(#1abc9c)%an%C(reset)%C(yellow),%C(reset) %C(#007055)%cr%C(reset)%C(yellow))%C(reset)'"

git树。分支——所有分支/标签提交的时间戳日志

# Some refinements to normal 'git tree' output for alternative perspectives.
[alias "tree"]
    branches = tree --simplify-by-decoration

颜色代码

Spec Color Style
Commit ID Yellow Underline
Commit date Dark Blue
Commit time Light Blue
Commit message White
Commit Author Green
Commit relative date Dark Green
Remote branches Red
Local branches Purple
Tags Pink Underline

我找到了这篇博客文章,它给出了一个简洁的方法:

git log --oneline --abbrev-commit --all --graph --decorate --color

我通常为上面的命令创建一个别名:

alias gl='git log --oneline --abbrev-commit --all --graph --decorate --color'

只需使用gl。

您还可以将别名添加到Git配置中。打开文件~/。并在[alias]部分中添加以下行:

[alias]
        lg = log --oneline --abbrev-commit --all --graph --decorate --color

像这样使用它:

git lg

样例输出: