在git中可视化分支拓扑
我在自己的机器上孤立地玩git,我发现很难保持所有分支和提交的心智模式。 我知道我可以做一个git log
来查看我所在的提交历史logging,但是有没有办法看到整个分支地形,就像这些ascii地图似乎在任何地方用来解释分支?
.-A---M---N---O---P / / / / / IBCDE \ / / / / `-------------'
它只是觉得有人来,并试图拿起我的存储库将难以确切地发生了什么事情。
我想我受到AccuRev的stream浏览器的影响 …
git log --graph
或gitk
。 (两者都接受 – 所有,这将显示所有分支,而不是只是当前的。)
编辑:对于分支名称和紧凑视图,请尝试: git log --graph --decorate --oneline
我通常使用
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"
这将打印这样的基于文本的表示forms:
* 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
,但是它会将提交消息绑定到数字,这看起来不太漂亮)。
要创build这个命令的快捷方式,你可能需要编辑你的~/.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在评论中的Vociferous笔记,这样长的格式命令很难记住。 通常情况下,这不是问题,因为你可能会把它放到~/.gitconfig
文件中。 但是,如果您有时必须login到无法修改configuration文件的远程计算机,则可以使用更简单但更快速的键入版本:
git log --graph --oneline
2¢ :我有3个别名(和4个别名别名用于快速使用) ,我通常在我的~/.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 lg2
看起来像这样:
和git lg3
看起来像这样:
注意:从stackoverflow.com/questions/1057564/pretty-git-branch-graphs复制并改进了答案,因为这里比在那里更合适。 由于历史的原因,在另一个问题上留下副本 – 现在已经closures了,答案被其他一些答案所引用。
对于任何这些食谱(基于git log或gitk),你可以添加--simplify-by-decoration
来折叠历史的无趣的线性部分。 这使得更多的拓扑一次可见。 我现在可以理解,如果没有这个选项,大的历史将是不可理解的!
我觉得有必要张贴这个,因为它似乎不像应该那样广为人知。 它没有出现在关于可视化历史的堆栈溢出问题的大部分,我花了很多searchfind – 即使我知道我想要它! 我终于在这个Debian的bug报告中find了它。 Stack Overflow的第一个提到似乎是Antoine Pelisse的这个答案 。
Gitk
有时候让我感到痛苦。
激励我写GitVersionTree 。
“99.999%的时间是通过git lg
查看历史logging,0.001%是通过git log
”
只是想分享2个可能有用的日志别名。 (从.gitconfigconfiguration)
[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
会看到当前的分支历史logging。 -
git hist
会看到整个分支的历史。
我喜欢用git log
来做:
git log --graph --oneline --branches
(也可以用于查看远程分支)
适用于最近的Git版本: 自1.6.3 ( 2009年5月7日,星期四 )
现在可以将日志系列命令的“
--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次提交)
我不喜欢目前select的解决scheme是:
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个提交很快就足够了。
看一下Gitkraken – 一个以清晰的方式显示拓扑结构的跨平台GUI。
以下是一些高级function的快速video教程 。
Gitg对于Linux 来说是一个很好的工具,类似于OS X的Gitx。只需要在你的版本库树结构的某个地方的命令行上运行'gitg'(和gitx一样)。
我发现“git-big-picture”相当有用: https : //github.com/esc/git-big-picture
它使用dot / graphviz创build漂亮的2Dgraphics,而不是相当线性的,“一维”的视图gitk和朋友产生。 使用-i选项,它显示分支点和合并提交,但是留下了所有的内容。
一个很好的基于Web的工具是ungit 。 它运行在node.js&git支持的任何平台上。 有一个video说明如何find比阅读更容易的事情
看看BranchMaster 。
我把它写成可视化复杂的分支结构,把它们之间的所有提交合并成一行。 数字表示提交的数量。
Giggle绘制漂亮的图表
我使用以下别名。
[alias] lol = log --graph --decorate --pretty=oneline --abbrev-commit lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
它在配色scheme中比上面我看到的别名有更多的信息。 它也似乎是相当普遍的,所以你可能有机会在其他环境中存在,或者能够在谈话中提及它,而不必解释它。
截图和完整的描述在这里: http : //blog.kfish.org/2010/04/git-lola.html
龟Git有一个名为“修正图”的工具。 如果你在Windows上,就像右键单击你的repo – > Tortoise Git – >修改图一样简单。
我发现这个博客文章显示了一个简洁的方式:
git log --oneline --abbrev-commit --all --graph --decorate --color
我通常为上面的命令创build一个别名:
alias gg='git log --oneline --abbrev-commit --all --graph --decorate --color'
简单的使用gg
。
我个人最喜欢的别名,通过.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"
旧post,但检查SmartGit
。 它非常让人想起龟HG分支可视化,它是免费的非商业用途。
我在~/.gitconfig
有这个git log
别名来查看图表历史logging:
[alias] l = log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'
有了别名, git l
会显示如下的内容:
在Git 2.12 +中,您甚至可以使用log.graphColors
configuration选项自定义graphics的线条颜色。
至于日志的格式,它类似于--oneline
,增加了作者的名字 (尊重.mailmap
)和相对作者的date 。 请注意,Git> = 1.8.3支持%C(auto)
语法,它告诉Git使用默认的提交散列颜色等。
如果你碰巧在OS X上,Gitx也是一个很棒的可视化工具。
另一个git log命令。 这一个固定宽度的列 :
git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short
没有人提到tig
? 它不会像“BranchMaster”一样折叠分支,但…
它很快,在terminal运行。
因为它很快(+键盘控制),你会得到一个伟大的用户体验,它几乎就像我的“ ls
”包含git仓库的目录。
它有通常的快捷方式,search等
(ps。它是这个截图后台的terminal,现在看起来好多了,但是我的电脑拒绝截图了,对不起)
(pps。我也使用gitkraken,并且具有非常清晰的可视化效果,但比tig要重得多)
我已经尝试过 – --simplify-by-decoration
但我所有的合并都没有显示。 所以我只是剪掉标题中没有“\”和“/”符号的行,而总是保留“(”表示分支之后立即显示分支历史logging,我一般对提交注释不感兴趣,所以我也删除它们,最后我得到了下面的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/).*/)/' }
对于Mac用户,免费开源工具GitUp(无双关语): http ://gitup.co/
我喜欢图表的显示方式,比我见过的其他工具更清晰。
该项目在这里: https : //github.com/git-up/GitUp