Wyjście gałęzi git w stylu drzewa

160

W tej chwili, gdy wpisuję „git branch”

wymienia moje oddziały w dowolnej kolejności.

Wolałbym, żeby "git branch" umieścił moje wyjście w drzewie, takim jak fasion, na przykład:

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

Gdzie tutaj, foo i bar zostały rozgałęzione od master; foo1 i foo2 zostały rozgałęzione z foo; bar4 został rozgałęziony z bar.

Czy jest to łatwe do osiągnięcia?

[Tylko narzędzia wiersza poleceń. To musi pasować do mojego przepływu pracy zsh / vim.]

zaraz
źródło
Żadna z odpowiedzi tutaj (w tym moja własna) nie wydaje się być odpowiednim rozwiązaniem dla tego, czego myślę, że naprawdę chcesz, i tego, czego chcę. Napiszę nowe narzędzie, które rozwiąże ten problem, kiedy będę miał okazję. Pewnie to nazwie git_tree. Wyświetli coś takiego jak arc flowtutaj: stackoverflow.com/questions/54227968/… . Być może kiedyś uda mi się nawet połączyć go z samym git.
Gabriel Staples
Wydaje się, że ta osoba też chce tego samego: reddit.com/r/git/comments/282c1f/ ...
Gabriel Staples
git log --graphmyślę, że wystarczy.
DawnSong

Odpowiedzi:

203

Plik odpowiedź używagit log :

Wspomniałem o podobnym podejściu w 2009 r. Z „ Nie można pokazać drzewa Git w terminalu ”:

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

Ale pełna wersja, której używałem, to „ Jak wyświetlić nazwę tagu i nazwę gałęzi za pomocą 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

Oryginalna odpowiedź (2010)

git show-branch --list zbliża się do tego, czego szukasz (z kolejnością topo)

--topo-order

Domyślnie gałęzie i ich zatwierdzenia są wyświetlane w odwrotnej kolejności chronologicznej.
Ta opcja sprawia, że ​​pojawiają się one w porządku topologicznym (tzn. Zatwierdzenia potomne są wyświetlane przed ich rodzicami).

Ale narzędzie git wtf też może pomóc . 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] (edwardzyang@...; 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] (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 pokazuje ci:

  • Jak Twój oddział odnosi się do zdalnego repozytorium, jeśli jest to gałąź śledząca.
  • Jak twoja gałąź odnosi się do gałęzi niefunkcjonalnych ("wersja"), jeśli jest to gałąź funkcji.
  • Jak twoja gałąź odnosi się do gałęzi funkcji, jeśli jest to gałąź wersji
VonC
źródło
Używam odmiany Twojego ładnego formatu, który pokazuje również adres e-mail autora, używając% ae. Wolę również nazywać alias przez „sl”, aby przypominał smartlog hg.
fiorix
Wielkie dzięki za link do git-wtfnarzędzia, jest niesamowicie przydatne. Wydaje się, że zasadniczo rozbija wnioski, które wyciągnąłbym z gapienia się na fantazyjne git logdrzewo, ale w ładnym podsumowaniu.
Luke Davis
Miałem nadzieję znaleźć sposób, tak że oddział Zamówienie powinno pokazać z którego oddział został wyrejestrowany z
Chang Zhao
@ChangZhao To jest podobne do „znajdowania gałęzi nadrzędnej” i nie jest łatwe: stackoverflow.com/a/3162929/6309 , stackoverflow.com/a/56452713/6309
VonC
147

To nie jest do końca to, o co prosiłeś, ale

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

wykonuje całkiem niezłą robotę. Pokazuje również tagi i zdalne gałęzie. Może to nie być pożądane dla wszystkich, ale uważam to za przydatne. --simplifiy-by-decorationjest tutaj wielką sztuczką ograniczającą pokazane referencje.

Używam podobnego polecenia, aby wyświetlić mój dziennik. Udało mi się całkowicie zastąpić nim moje gitkużycie:

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

Używam go, dołączając te aliasy do mojego pliku ~ / .gitconfig:

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

Edycja: zaktualizowano sugerowane polecenia / aliasy dziennika, aby używać prostszych flag opcji.

brak gotówki
źródło
1
IMO to najlepsza odpowiedź tutaj, ale myślę, że SourceTree lub gitk lub tym podobne są drogą do tego rodzaju rzeczy.
JaKXz
Spowoduje to wyświetlenie gałęzi na początku. Czy jest jakiś sposób, aby wyświetlić to dla lokalnych oddziałów?
Jeff,
@Jeff wymianie --allz --branches --tagsprawdopodobnie to zrobić.
nocash
doskonała odpowiedź. To, czego szukałem, znalazłem tutaj. Wspaniały.
AMIC MING
12

Poniższy przykład pokazuje również zaangażowanych 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'
Ben
źródło
10

Możesz użyć narzędzia o nazwie gitk.

Vladimir Prudnikov
źródło
Uwielbiam gitk, ale nie zorientowałem się gitkw Macu. Jeśli masz jakieś sugestie, daj mi znać. Zacząłem używać, Github Desktopale uwielbiam pracować w wierszu poleceń.
AMIC MING
6

Testowane na Ubuntu:

sudo apt install git-extras
git-show-tree

Daje to efekt podobny do 2 odpowiedzi, na które najczęściej głosowano tutaj.

Źródło: http://manpages.ubuntu.com/manpages/bionic/man1/git-show-tree.1.html


Ponadto, jeśli masz zainstalowany arcanist (poprawka: widelec arcanista Ubera zainstalowany - instrukcje instalacji znajdziesz na dole tej odpowiedzi ), arc flowpokazuje piękne drzewo zależności nadrzędnych zależności (tj .: które zostały ustawione wcześniej przez arc flow new_branchlub ręcznie za pomocągit branch --set-upstream-to=upstream_branch ).

Dodatkowe sztuczki git:

Związane z:

  1. Jaka jest różnica między „arc graft” a „arc patch”?
Gabriel Staples
źródło
-1

Dla tych, którzy używają Github, mają przeglądarkę sieci oddziałów , która wydaje się łatwiejsza do odczytania

kip2
źródło