2010-03-10 9 views
88

Teraz, gdy wpisuję "gałąź git"Wyjście gałęzi GIT w drzewie podobnym do mody

wyświetla listę moich oddziałów w dowolnej kolejności.

Co wolałbym byłoby, gdyby „git branch” wymieniono moje wyjście w drzewie jak fasion, somethign jak:

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

Gdzie tu, bla & bar były rozgałęzione od kapitana; foo1 & foo2 zostały rozgałęzione od foo; bar4 został rozgałęziony z baru.

Czy to jest łatwe do wykonania?

[Tylko narzędzia wiersza poleceń. To musi pasować do mojego zsh/vim workflow]

Odpowiedz

106

answer below wykorzystuje git log.

wspominałem podobnego podejścia w 2009 roku "Unable to show a Git tree in terminal":

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

Ale pełne jeden mam używa się w "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 

Original odpowiedź (2010)

git show-branch --list zbliża czego szukasz (z rzędu topo)

--topo-order 

Domyślnie, gałęzie i ich commity pokazane są w odwrotnym porządku chronologicznym.
Ta opcja powoduje, że są one wyświetlane w porządku topologicznym (tzn. Potomne zatwierdzenia są wyświetlane przed rodzicami).

Ale narzędzie git wtf może help too. Przykład:

$ git wtf 
Local branch: master 
[ ] NOT in sync with remote (needs push) 
    - Add before-search hook, for shortcuts for custom search queries. [4430d1b] ([email protected]; 7 days ago) 
Remote branch: origin/master ([email protected]: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] ([email protected]; 2 days ago) 
[ ] labels-before-subj is NOT merged in (1 commit ahead) 
    - put labels before subject in thread index view [790b64d] ([email protected]; 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 pokazuje:

  • Jak twój oddział odnosi się do zdalnego repo, czy jest to oddział śledzenia.
  • Sposób, w jaki twój oddział odnosi się do gałęzi bez funkcji ("wersja"), jeśli jest to gałąź funkcji.
  • Jak twój oddział dotyczy gałęzi m.in., czy jest to oddział wersja
+0

używa odmianę swojej ładnej formacie, który pokazuje, jak również autor e-maila, używając% ae. Również wolę nazywać alias "sl", aby przypominał smartlog hg. – fiorix

+0

Wielkie dzięki za link do narzędzia 'git-wtf', jest niesamowicie użyteczny. Wydaje się, że w zasadzie rozkłada wnioski wyciągnięte z wpatrywania się w fantazyjne drzewo 'git log', ale w ładnym podsumowaniu. –

8

można użyć narzędzia o nazwie gitk.

+0

Uwielbiam gitk, ale nie wymyśliłem '' 'gitk''' na Macu. Jeśli masz jakieś sugestie, daj mi znać. Zacząłem używać '' 'Github Desktop''' ale lubię pracować na linii poleceń. –

105

To nie jest całkiem co prosiłeś, ale

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

robi bardzo dobrą robotę. Pokazuje również znaczniki i odległe gałęzie.Może to nie być pożądane dla wszystkich, ale uważam, że jest to przydatne. --simplifiy-by-decoration to wielka sztuczka do ograniczenia wyświetlanych informacji.

Używam podobnego polecenia, aby wyświetlić mój log. Byłem w stanie całkowicie zastąpić mój gitk użycia z nim:

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

Używam go przez włączenie tych aliasów w moim pliku ~/.gitconfig:

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

Edit: Updated zasugerował dziennika polecenie/aliasy do używania prostszych flag opcji.

+1

IMO to najlepsza odpowiedź tutaj, ale myślę, że [SourceTree] (http://sourcetreeapp.com/) lub gitk lub podobne jest sposób, aby przejść do tego rodzaju rzeczy. – JaKXz

+0

Wyświetla rozgałęzienia w punkcie początkowym. Czy istnieje sposób, aby wyświetlić to dla lokalnych oddziałów? – Jeff

+0

@Jeff zastępując '--all' z' --branches --tags' prawdopodobnie to zrobi. – nocash

7

Poniższy przykład pokazuje, jak również zobowiązać rodziców:

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' 
+1

Nie działa w systemie Windows. –

Powiązane problemy