像时尚一样在树中输出git branch

时间:2010-03-10 22:10:27

标签: git

现在,当我输入“git branch”

它以任意顺序列出我的分支。

我更喜欢的是,如果“git branch”将我的输出列在像fasion这样的树中,有点像:

master
|-- foo
  |-- foo1
  |-- foo2
|-- bar
  |-- bar4

在这里,foo&酒吧是从主人分支; foo1& foo2从foo分支出来; bar4从酒吧分支。

这很容易实现吗?

仅限命令行实用程序。这需要适合我的zsh / vim工作流程。]

6 个答案:

答案 0 :(得分:144)

answer below使用git log

我在2009年用“Unable to show a Git tree in terminal”提到了类似的方法:

git log --graph --pretty=oneline --abbrev-commit

但我一直在使用的完整版本是“How to display the tag name and branch name using git log --graph”(2011):

git config --global alias.lgb "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset%n' --abbrev-commit --date=relative --branches"

git lgb

原始答案(2010)

git show-branch --list接近您正在寻找的内容(使用地形顺序)

--topo-order
  

默认情况下,分支及其提交按逆时间顺序显示   此选项使它们以拓扑顺序出现(即,后代提交显示在其父项之前)。

但是工具git wtf可以help too。例如:

$ git wtf
Local branch: master
[ ] NOT in sync with remote (needs push)
    - Add before-search hook, for shortcuts for custom search queries. [4430d1b] (edwardzyang@...; 7 days ago)
Remote branch: origin/master (git@gitorious.org:sup/mainline.git)
[x] in sync with local

Feature branches:
{ } origin/release-0.8.1 is NOT merged in (1 commit ahead)
    - bump to 0.8.1 [dab43fb] (wmorgan-sup@...; 2 days ago)
[ ] labels-before-subj is NOT merged in (1 commit ahead)
    - put labels before subject in thread index view [790b64d] (marka@...; 4 weeks ago)
{x} origin/enclosed-message-display-tweaks merged in
(x) experiment merged in (only locally)

NOTE: working directory contains modified files
  

git-wtf告诉您:

     
      
  • 如果您的分支是跟踪分支,您的分支如何与远程仓库相关。
  •   
  • 如果分支是特征分支,则分支与非特征(“版本”)分支的关系如何。
  •   
  • 如果您的分支是版本分支
  • ,您的分支与功能分支的关系   

答案 1 :(得分:125)

这不是你要求的,但是

git log --graph --simplify-by-decoration --pretty=format:'%d' --all

做得很好。它还显示标签和远程分支。这可能并不适合每个人,但我发现它很有用。 --simplifiy-by-decoration是限制所显示的参考的重要技巧。

我使用类似的命令来查看我的日志。我已经能够用它完全取代gitk用法:

git log --graph --oneline --decorate --all

我通过在〜/ .gitconfig文件中包含这些别名来使用它:

[alias]
    l = log --graph --oneline --decorate
    ll = log --graph --oneline --decorate --branches --tags
    lll = log --graph --oneline --decorate --all

编辑:更新了建议的日志命令/别名,以使用更简单的选项标记。

答案 2 :(得分:10)

您可以使用名为gitk的工具。

答案 3 :(得分:10)

以下示例也显示了提交父级:

git log --graph --all \
--format='%C(cyan dim) %p %Cred %h %C(white dim) %s %Cgreen(%cr)%C(cyan dim) <%an>%C(bold yellow)%d%Creset'

答案 4 :(得分:2)

在Ubuntu上测试:

sudo apt install git-extras
git-show-tree

这产生的效果类似于此处最受好评的2个答案。

来源:http://manpages.ubuntu.com/manpages/bionic/man1/git-show-tree.1.html


此外,如果您已安装 arcanist ,则arc flow会显示一个漂亮的上游依赖项依赖关系树(即:先前是通过arc flow new_branch或手动设置的)通过git branch --set-upstream-to=upstream_branch)。

答案 5 :(得分:0)

对于使用Github的用户,他们有一个分支network viewer,看起来更容易阅读