我在自己的机器上独立玩 git,我发现很难维护我所有分支和提交的心理模型。我知道我可以做一个git log
来查看我所在的提交历史,但是有没有办法看到整个分支拓扑,就像这些 ascii 映射似乎随处可用来解释分支?
.-A---M---N---O---P
/ / / / /
I B C D E
\ / / / /
`-------------'
只是觉得有人出现并试图拿起我的存储库会很难确定正在发生的事情。
我想我受 AccuRev 流媒体浏览器的影响 ......
git log --graph
或gitk
。 (两者都接受--all
,它将显示所有分支而不仅仅是当前分支。)
编辑:对于分支名称和紧凑视图,请尝试: 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"
这将打印基于文本的表示,如下所示:
* 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"
然而,正如Vociferous在评论中所说的那样,这种长格式化命令难以记忆。通常,这不是问题,因为您可以将其放入~/.gitconfig
文件中。但是,如果您有时必须登录到无法修改配置文件的远程计算机,则可以使用更简单但更快的类型版本:
git log --graph --oneline
我有 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 上复制并改进了答案,因为它在这里比在那里更合适。由于历史原因,将副本留在另一个问题上 - 它现在已关闭,答案由一堆其他答案引用。