在git中可视化分支拓扑

时间:2009-12-03 09:55:04

标签: git

我在我自己的机器上孤立地玩git,我发现很难维护我所有分支和提交的心理模型。我知道我可以做一个git log来查看我所处的提交历史,但是有没有办法看到整个分支地形,就像这些ascii地图似乎随处可用来解释分支?

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

只是觉得有人出现并试图拿起我的存储库会很难确定正在发生的事情。

我想我受到了AccuRev的stream browser ...

的影响

32 个答案:

答案 0 :(得分:960)

git log --graphgitk。 (两者都接受--all,它将显示所有分支而不是当前分支。)

修改 对于分支名称和紧凑视图,请尝试:git log --graph --decorate --oneline

答案 1 :(得分:453)

我通常使用

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) Mannual 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 succesfully
| *   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

答案 2 :(得分:380)

我有3个别名(以及4个别名 - 别名以便快速使用)我通常会在window.contentView.translatesAutoresizingMaskIntoConstraints = NO; 文件中输入

~/.gitconfig

[alias] lg = !"git lg1" lg1 = !"git lg1-specific --all" lg2 = !"git lg2-specific --all" lg3 = !"git lg3-specific --all" lg1-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)' lg2-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' lg3-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset) %C(bold cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)%n'' %C(white)%s%C(reset)%n'' %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)' / git lg如下所示:

git lg1

git lg1看起来像这样:

git lg2

git lg2看起来像这样:

git lg3

注意:答案在stackoverflow.com/questions/1057564/pretty-git-branch-graphs复制并改进了答案,因为它在这里比在那里更合适。由于历史原因,将副本留在另一个问题上 - 它现在已关闭,答案由一堆其他答案引用。

答案 3 :(得分:217)

对于这些配方中的任何一个(基于git log或gitk),您可以添加--simplify-by-decoration来折叠历史记录中不感兴趣的线性部分。这样可以立即显示更多的拓扑。我现在可以理解没有这个选项会难以理解的大历史!

我觉得有必要发布这个,因为它似乎并不像它应该的那样众所周知。它没有出现在关于可视化历史的大多数Stack Overflow问题中,并且我花了很多时间寻找 - 即使在我知道我想要它之后!我终于在Debian bug report找到了它。 Stack Overflow的第一次提及似乎是Antoine Pelisse的this answer

答案 4 :(得分:66)

Gitk有时我很难读。

enter image description here

激励我写GitVersionTree

enter image description here

答案 5 :(得分:47)

&#34; 99.999%的时间按git lg查看历史记录,0.001%是git log&#34;

只想分享可能有用的2个日志别名。 (从.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将会看到整个分支历史。

答案 6 :(得分:42)

我喜欢git log来做:

 git log --graph --oneline --branches

(也用--all,用于查看远程分支)

适用于最近的Git版本:介绍since 1.6.3Thu, 7 May 2009

  
      
  • 日志命令系列的“--pretty=<style>”选项现在拼写为“--format=<style>”。
      此外,--format=%formatstring--pretty=tformat:%formatstring的缩写。

  •   
  • --oneline”是“--pretty=oneline --abbrev-commit”的同义词。

  •   
PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
| | * 8183707 a first bug10 fix
| |/
| * e727105 a second evol for 2.0
| * 473d44e a main evol
|/
* b68c1f5 first evol, for making 1.0

您还可以限制日志显示的范围(提交次数):

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all -5
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix

(仅显示最近5次提交)


我不喜欢当前选择的解决方案:

 git log --graph

显示太多信息(当我只想查看快速摘要时):

PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC <vonc@laposte.net>
| Date:   Sat Nov 14 13:42:20 2009 +0100
|
|     a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <vonc@laposte.net>
| Date:   Sat Nov 14 13:41:50 2009 +0100
|
|     a first bug10 fix
|

gitk很棒,但强迫我将shell会话留给另一个窗口,而快速显示最后n个提交通常就足够了。

答案 7 :(得分:40)

查看Gitkraken - 一个以清晰的方式显示拓扑的跨平台GUI。

Topology

这是一些关于某些高级功能的快速video tutorial

答案 8 :(得分:32)

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

答案 9 :(得分:23)

一个不错的基于网络的工具是ungit。它运行在node.js和amp;的任何平台上。 git支持。对于那些发现比阅读更容易的事情的人来说,它有video的效果......

enter image description here

答案 10 :(得分:23)

我发现“git-big-picture”非常有用:https://github.com/esc/git-big-picture

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

答案 11 :(得分:18)

查看BranchMaster

我编写它来可视化复杂的分支结构,将它们之间的所有提交折叠为一行。数字表示提交的数量。

enter image description here

答案 12 :(得分:14)

Giggle绘制漂亮的图表

答案 13 :(得分:13)

Tortoise Git有一个名为“修订图”的工具。如果您使用的是Windows,只需右键单击您的回购 - &gt; Tortoise Git - &gt;修订图。

答案 14 :(得分:12)

我使用以下别名。

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

配色方案中的信息多于我上面看到的别名。它似乎也很常见,所以你可能有机会在其他环境中存在它,或者能够在谈话中提及它而不必解释它。

此处有截图和完整说明: http://blog.kfish.org/2010/04/git-lola.html

答案 15 :(得分:11)

没人提到if(root.getVal().equals("*")) { if(root.getLeftChild().getVal().equals("1")) { return root.getRightChild(); } else if(root.getRightChild().getVal().equals("1")) { return root.getLeftChild(); } else if(root.getLeftChild().getVal().equals("0")) { return root.getLeftChild(); } else if(root.getRightChild().getVal().equals("0")) { return root.getRightChild(); } else if(root.getLeftChild().getVal().equals("*")) { if(root.getRightChild().getType().equals("constant")) { if(root.getLeftChild().getLeftChild().getType().equals("constant")) { // Ex: (5*x)*6 ==> 30*x int num1 = Integer.parseInt(root.getRightChild().getVal()); int num2 = Integer.parseInt(root.getLeftChild().getLeftChild().getVal()); OpNode mult = new OpNode("*"); mult.setLeftChild(new ConstNode(String.valueOf(num1 * num2))); mult.setRightChild(root.getLeftChild().getRightChild()); return mult; } ... ... ... ... ?它不会折叠分支,例如&#34; BranchMaster&#34;,但是......

速度快,在终端运行。

因为它如此快速(+键盘控制)你获得了很好的用户体验, 它几乎就像我的#34; tig&#34;对于包含git存储库的目录。

https://jonas.github.io/tig/

它有通常的快捷方式,ls来搜索等等。

The revision graph

(ps。它是此屏幕截图背景中的终端,现在看起来更好,但我的电脑拒绝截取屏幕截图,抱歉)

(pps。我也使用gitkraken并且具有非常清晰的可视化效果,但它比/重得多)

答案 16 :(得分:9)

我在git log中有~/.gitconfig个别名来查看图表历史记录:

[alias]
l = log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'

使用别名后,git l将显示如下内容:

enter image description here

在Git 2.12 +中,您甚至可以使用log.graphColors配置选项自定义图表的线条颜色。

至于日志的格式,它类似于--oneline,添加了作者姓名(尊重.mailmap)和相对作者日期< / strong>即可。请注意,Git&gt; = 1.8.3支持%C(auto)语法,它告诉Git使用提交哈希的默认颜色等。

答案 17 :(得分:9)

对于Mac用户,结帐(没有双关语)免费的开源工具GitUp:http://gitup.co/

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

项目在这里:https://github.com/git-up/GitUp

GitUp screenshot

答案 18 :(得分:7)

我发现this blog post显示了一种简洁的方式:

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

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

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

简单地使用gl

您还可以将别名添加到git配置中。打开~/.gitconfig并将以下行添加到 [别名]

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

并像这样使用它:git lg

答案 19 :(得分:7)

对于使用VSCode text editor的人,请考虑D. Jayamanne的Git History Extension

enter image description here

答案 20 :(得分:6)

另一个git log命令。这个固定宽度列

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

答案 21 :(得分:6)

如果您碰巧使用OS X,Gitx也是一款出色的可视化工具。

答案 22 :(得分:6)

我个人最喜欢的别名是.gitconfig:

graph = log --graph --color --all --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"

答案 23 :(得分:5)

旧帖子,但请查看SmartGit。它非常提醒Tortoise HG分支可视化,它可以免费用于非商业用途。

答案 24 :(得分:3)

我正在使用 Visual Studio Code 编辑器,我发现自己对它的 Git Graph 扩展非常满意,它由 mhutchie 制作。 (而且我并不孤单,该扩展程序有 100 万用户!)。

Enter image description here

如果您碰巧喜欢编辑器,那么只需转到扩展选项卡(左侧中间的隔间)并输入“Git Graph”并安装

Enter image description here

要使用它,请转到 Git control 选项卡并按 View Git Graph 按钮

Enter image description here

答案 25 :(得分:2)

在Windows上,您可以使用一个非常有用的工具:git extensions。它是一个gui工具,使git操作非常容易。

它也是开源的。

http://gitextensions.github.io

答案 26 :(得分:2)

最受好评的答案显示git log命令是最喜欢的解决方案。

如果您需要 tablelike (例如输出列),则可以对.gitconfig alias.tably 代码段进行一些稍加修改和一些限制的git log命令在下面。

修改:

  • 您必须在每个提交占位符之前使用%><(<N>[,ltrunc|mtrunc|trunc])
  • 添加唯一的定界符作为列分隔符
  • 为彩色输出添加--color选项

限制:

  • 只要不使用非空换行符%n...
  • ,就可以将git图放在每一列
  • 可以在不使用任何换行符的情况下使用最后一个提交占位符 %><(<N>[,trunc])
  • 如果需要额外的字符来装饰,例如{p}中的(committer:<>)

    ...%C(dim white)(committer: %cn% <%ce>)%C(reset)...

    要获得类似表格的输出,必须在提交占位符之前和之后直接编写

    ...%C(dim white)%<(25,trunc)(committer: %cn%<(25,trunc) <%ce>)%C(reset)...

  • 如果--format=format:选项不是最后一个选项,则通常以%C(reset)关闭它

  • 与普通的git log输出相比,这很慢但很好

Example来自该网站:

thompson1     = log --all --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)'

将以^作为分隔符,并且不添加字符

thompson1-new = log --all --graph --color --abbrev-commit --decorate --format=format:'^%C(bold blue)%<(7,trunc)%h%C(reset)^%C(bold green)%<(21,trunc)%ar%C(reset)^%C(white)%<(40,trunc)%s%C(reset)^%C(dim white)%<(25,trunc)%an%C(reset)^%C(auto)%d%C(reset)'

比较就像

enter image description here

enter image description here

或将图形移动到第5列

enter image description here

要实现此目的,请将以下内容添加到.gitconfig中,并使用 git tably YourLogAlias

[color "decorate"]
    HEAD = bold blink italic 196
    branch = 214
    tag = bold 222

[alias]

    # delimiter used as column seperator
    delim = ^
    # example thompson1
    thompson1     = log --all --graph         --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)'
    # modified thompson1 example
    thompson1-new = log --all --graph --color --abbrev-commit --decorate --format=format:'^%C(bold blue)%<(7,trunc)%h%C(reset)^%C(bold green)%<(21,trunc)%ar%C(reset)^%C(white)%<(40,trunc)%s%C(reset)^%C(dim white)%<(25,trunc)%an%C(reset)^%C(auto)%d%C(reset)'
    # set a column for the graph
    thompson1-new-col = 1

tably     = !bash -c '"                                                                                                              \
              declare -A col_length;                                                                                                 \
              delim=$(git config alias.delim);                                                                                       \
              git_log_cmd=$(git config alias.$1);                                                                                    \
              git_tre_col=${2:-$(git config alias.$1-col)};                                                                          \
                                                                                                                                     \
              i=0;                                                                                                                   \
              n=0;                                                                                                                   \
              while IFS= read -r line; do                                                                                            \
                ((n++));                                                                                                             \
                while read -d\"$delim\" -r col_info;do                                                                               \
                  ((i++));                                                                                                           \
                  [[ -z \"$col_info\" ]] && col_length[\"$n:$i\"]=${col_length[\"${last[$i]:-1}:$i\"]} && ((i--)) && continue;       \
                  [[ $i -gt ${i_max:-0} ]] && i_max=$i;                                                                              \
                  col_length[\"$n:$i\"]=$(grep -Eo \"\\([0-9]*,[lm]*trunc\\)\" <<< \"$col_info\" | grep -Eo \"[0-9]*\" | head -n 1); \
                  [[ -n \"${col_length[\"$n:$i\"]}\" ]] && last[$i]=$n;                                                              \
                  chars_extra=$(grep -Eo \"\\trunc\\).*\" <<< \"$col_info\");                                                        \
                  chars_extra=${chars_extra#trunc)};                                                                                 \
                  chars_begin=${chars_extra%%\\%*};                                                                                  \
                  chars_extra=${chars_extra#*\\%};                                                                                   \
                  case \" ad aD ae aE ai aI al aL an aN ar as at b B cd cD ce cE ci cI cl cL cn cN cr                                \
                          cs ct d D e f G? gd gD ge gE GF GG GK gn gN GP gs GS GT h H N p P s S t T \" in                            \
                   *\" ${chars_extra:0:2} \"*)                                                                                       \
                     chars_extra=${chars_extra:2};                                                                                   \
                     chars_after=${chars_extra%%\\%*};                                                                               \
                     ;;                                                                                                              \
                   *\" ${chars_extra:0:1} \"*)                                                                                       \
                     chars_extra=${chars_extra:1};                                                                                   \
                     chars_after=${chars_extra%%\\%*};                                                                               \
                     ;;                                                                                                              \
                   *)                                                                                                                \
                     echo \"No Placeholder found. Probably no tablelike output.\";                                                   \
                     continue;                                                                                                       \
                     ;;                                                                                                              \
                  esac ;                                                                                                             \
                  if [[ -n \"$chars_begin$chars_after\" ]];then                                                                      \
                    len_extra=$(echo \"$chars_begin$chars_after\" | wc -m);                                                          \
                    col_length["$n:$i"]=$((${col_length["$n:$i"]}+$len_extra-1));                                                    \
                  fi;                                                                                                                \
                                                                                                                                     \
                done <<< \"${line#*=format:}$delim\";                                                                                \
                i=1;                                                                                                                 \
              done <<< \"$(echo -e \"${git_log_cmd//\\%n/\\\\n}\")\";                                                                \
                                                                                                                                     \
              while IFS= read -r graph;do                                                                                            \
                chars_count=$(sed -nl1000 \"l\" <<< \"$graph\" | grep -Eo \"\\\\\\\\\\\\\\\\|\\||\\/|\\ |\\*|_\" | wc -l);           \
                [[ ${chars_count:-0} -gt ${col_length["1:1"]:-0} ]] && col_length["1:1"]=$chars_count;                               \
              done < <([[ -n \"$(grep -F graph <<< \"$git_log_cmd\")\" ]] && git log --all --graph --pretty=format:\" \" && echo);   \
                                                                                                                                     \
              l=0;                                                                                                                   \
              while IFS= read -r line;do                                                                                             \
                c=0;                                                                                                                 \
                ((l++));                                                                                                             \
                [[ $l -gt $n ]] && l=1;                                                                                              \
                while IFS= read -d\"$delim\" -r col_content;do                                                                       \
                  ((c++));                                                                                                           \
                  if [[ $c -eq 1 ]];then                                                                                             \
                    [[ -n \"$(grep -F \"*\" <<< \"$col_content\")\" ]] || l=2;                                                       \
                    chars=$(sed -nl1000 \"l\" <<< \"$col_content\" | grep -Eo \"\\\\\\\\\\\\\\\\|\\||\\/|\\ |\\*|_\" | wc -l);       \
                    whitespaces=$((${col_length["1:1"]}-$chars));                                                                    \
                    whitespaces=$(seq -s\" \" $whitespaces|tr -d \"[:digit:]\");                                                     \
                    col_content[1]=\"${col_content[1]}$col_content$whitespaces\n\";                                                  \
                  else                                                                                                               \
                    col_content[$c]=\"${col_content[$c]}$(printf \"%-${col_length[\"$l:$c\"]}s\" \"${col_content:-\"\"}\")\n\";      \
                  fi;                                                                                                                \
                done <<< \"$line$delim\";                                                                                            \
                for ((k=$c+1;k<=$i_max;k++));do                                                                                      \
                  empty_content=\"$(printf \"%-${col_length[\"$l:$k\"]:-${col_length[\"${last[$k]:-1}:$k\"]:-0}}s\" \"\")\";         \
                  col_content[$k]=\"${col_content[$k]}$empty_content\n\";                                                            \
                done;                                                                                                                \
              done < <(git $1 && echo);                                                                                              \
                                                                                                                                     \
              while read col_num;do                                                                                                  \
                if [[ -z \"$cont_all\" ]];then                                                                                       \
                  cont_all=${col_content[$col_num]};                                                                                 \
                else                                                                                                                 \
                  cont_all=$(paste -d\" \" <(echo -e \"$cont_all\") <(echo -e \"${col_content[$col_num]}\"));                        \
                fi;                                                                                                                  \
              done <<< $(seq 2 1 ${git_tre_col:-1};seq 1;seq $((${git_tre_col:-1}+1)) 1 $i_max);                                     \
              echo -e \"$cont_all\";                                                                                                 \
              "' "git-tably"

这或多或少只是我的答案https://stackoverflow.com/a/61487052/8006273的一部分,您可以在其中找到更深入的解释,但也很适合这里的问题。

如果您的git log命令有问题,请发表评论。

答案 27 :(得分:1)

我已经尝试了--simplify-by-decoration,但我的所有合并都没有显示。所以我只是修剪掉没有&#34; \&#34;和&#34; /&#34;标题处的符号,同时始终用&#34;(&#34;在此之后立即指示分支。当显示分支历史记录时,我通常对提交注释不感兴趣,所以我也删除它们。我最终使用以下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/).*/)/'
}

答案 28 :(得分:1)

我们可以使其变得更复杂吗?

简单如何 git log --all --decorate --oneline --graph(记住一条狗= --All --Decorate --Oneline --Graph)

答案 29 :(得分:1)

令人难以置信的是,在众多答案中没有提到Gitviz,适用于 Window/Linux/Mac
除了提供分支和提交的二维视图外,它还侦听您的 git 命令并自行修改图表。

enter image description here

答案 30 :(得分:1)

我想分享 compact 命令的 git log 预设:
(绿色是我的默认控制台颜色)
Preset preview

它被设计得尽可能紧凑和像桌子一样(不添加任何多余的空间),同时仍然信息丰富且易于阅读。这基本上是 Git 默认使用的 medium 格式的精简版。

特点:

  • 固定项目位置;
  • 提交哈希和引用名称的默认颜色;
  • 提交作者日期在当地时区;
  • 提交消息包含 128 个字符并缩进;
  • 还会显示扩展提交消息(如果有),并删除了任何尾随换行符。

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

$ 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 log 参考中的 PRETTY FORMATS section

答案 31 :(得分:0)

Git官方网站招募了一些第三方平台特定的GUI工具。嗨,您好 git GUI Tools for Linux Platform

我已经将gitgGitKraken用于linux平台。两者都很好理解提交树