2010-09-08 166 views
33

有沒有辦法在Git中只顯示分支結構?有很多工具可以用圖形方式顯示提交內容,但在我的情況下,列表太長以至於看不到結構。我猜git-log可能是答案,但我找不到任何只顯示分支提交的開關。這與「--graph --branches --oneline --all」一起可以做到這一點。顯示Git分支結構

編輯:我正在尋找一種方法來做到這一點在Ubuntu。

+1

可能重複的[漂亮的git分支圖](http://stackoverflow.com/questions/1057564/pretty-git-branch-graphs) – trblnc 2017-01-30 11:48:57

回答

30

我不知道你的意思是什麼「分支結構」。
git log可以幫助想像在提交所做的分支機構(見本blog post):

[alias] 
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative 

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

alt text

但是如果你只想要不同的HEAD分支,你可以嘗試something along the lines of

heads = !"git log origin/master.. --format='%Cred%h%Creset;%C(yellow)%an%Creset;%H;%Cblue%f%Creset' | git name-rev --stdin --always --name-only | column -t -s';'" 

(使用column command,這裏僅用於自上次提交origin/master以來的提交)

注意:Jakub Narębski推薦添加選項--simplify-by-decoration,請參閱his answer

+0

這非常接近(後一種解決方案),我只需將日期和 - 分支添加到命令。否則它只顯示當前分支。儘管它仍然沒有忽略不是頭的提交。我所說的「分支結構」是一種從每個分支創建的分支中查看的方式,但通過此命令,我可以滾動列表(其中有大約350個提交)來查看發生了什麼。 – Makis 2010-09-08 12:34:23

+0

@Makis:如果你有最後的命令,你可以把它作爲答案發布:我感興趣(並將它投票)。然後,如果你願意,你甚至可以接受你自己的答案作爲官方答案。 – VonC 2010-09-08 13:26:51

+0

我仍在研究它,明天我會回到辦公室去嘗試理解結構。回購是用svn2git創建的,我並不是100%確定svn回購是由該書提供的。 – Makis 2010-09-08 16:47:42

3

gitx,如果你是在Mac上

smartgit Mac和或Windoze(但我沒有用它)

git-gui然後對Ubuntu

+0

對不起,忘了提及我使用Ubuntu。 – Makis 2010-09-08 10:57:40

+0

git-gui(你的意思是gitk,對嗎?)對我不起作用 - 1.它只顯示你結帳的分支,我想要整個樹。它顯示了所有提交,我只對分支結構感興趣。 – ripper234 2011-05-27 15:04:32

+0

@ ripper234你可以使用'gitk -a'來顯示所有分支 – 2016-03-24 20:28:16

1

要獲得特定分支如何涉及你的資料庫和遙控器等分支機構,則可以使用git wtf它是由威廉·摩根在腳本中添加更多的信息:http://git-wt-commit.rubyforge.org/

它產生像摘要信息:

$ git wtf 
Local branch: master 
[x] in sync with remote 
Remote branch: origin/master ([email protected]:willgit/mainline.git) 
[x] in sync with local 

Feature branches: 
{ } origin/experimental is NOT merged in (1 commit ahead) 
    - some tweaks i'm playing around with [80e5da1] 
{ } origin/dont-assume-origin is NOT merged in (1 commit ahead) 
    - guess primary remote repo from git config instead of assuming "origin" [23c96f1] 

(取自上述URL的示例)。

6

,基本解決方案是:

git log --graph --all 

如果你想獲得更多的花哨:

git log --graph --all --pretty=format:"%Cblue%h%Creset [%Cgreen%ar%Creset] %s%C(yellow)%d%Creset" 
25

也許你想要的是--simplify-by-decoration選項,請參閱git log文檔:

- - 簡化裝修

         選擇某個分支或標記引用的提交。

因此,這將是

git log --graph --simplify-by-decoration --all 

或以下VonC answer

git log --graph --simplify-by-decoration \ 
    --pretty=format:'%Cred%h%Creset-%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' \ 
    --abbrev-commit --date=relative 
+0

非常好,我錯過了那個特別的選擇。 +1 – VonC 2010-09-10 04:18:40

+0

@VonC:這是一個相當新的選擇;它出現在git版本1.6.1中 – 2010-09-10 09:25:35

+0

1.6.1? http://git.kernel.org/?p=git​​/git.git;a=tags:2008年12月25日,星期四,對我來說似乎是一輩子;) – VonC 2010-09-10 10:55:13

6

也許我失去了一些東西,但似乎沒有人提到gitk --all呢。

+1

它也顯示所有個人提交。 – 2012-02-22 14:54:46

+2

我剛剛嘗試過'gitk --all - 簡化了裝飾,並且工作得很好。 (這是用git 1.7.9.5提供的gitk) – Rhubbarb 2013-10-15 17:41:28