Wizualizacja topologii gałęzi w git

Gram z Gitem w izolacji na własnej maszynie i trudno mi utrzymać mentalny model wszystkich moich gałęzi i commitów. Wiem, że mogę zrobić git log, aby zobaczyć historię zmian z miejsca, w którym jestem, ale czy istnieje sposób, aby zobaczyć całą topografię gałęzi, coś w rodzaju tych map ascii, które wydają się być używane wszędzie do objaśniania gałęzi?

      .-A---M---N---O---P
     /     /   /   /   /
    I     B   C   D   E
     \   /   /   /   /
      `-------------'

Wydaje mi się, że ktoś przychodzący i próbujący odebrać moje repozytorium miałby trudności z ustaleniem, co dokładnie / align = "left" /

W tym przypadku nie jest to możliwe...
 711
git
Author: agm1984, 2009-12-03

28 answers

git log --graph LUB gitk. (Oba również akceptują --all, które pokażą wszystkie gałęzie zamiast tylko bieżącej.)

Edit: W przypadku nazw gałęzi i widoku kompaktowego spróbuj: git log --graph --decorate --oneline

 874
Author: jrockway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-16 21:49:57

Zwykle używam

git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"

Z kolorami (jeśli twoja powłoka to Bash):

git log --graph --full-history --all --color \
        --pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"

To wyświetli tekstową reprezentację w następujący sposób:

* 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

(możesz po prostu użyć git log --format=oneline, ale będzie to wiązać komunikaty commit z liczbami, co wygląda mniej ładnie IMHO).

Aby utworzyć skrót do tego polecenia, możesz edytować swój plik ~/.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"

Jednak, jak w komentarzach notuje się głośno , tak długie polecenie formatowania jest trudne do zapamiętania. Zazwyczaj nie stanowi to problemu, ponieważ można go umieścić w pliku ~/.gitconfig. Jednak, jeśli czasami musisz zalogować się na zdalnym komputerze, gdzie nie możesz zmodyfikować pliku konfiguracyjnego, możesz użyć prostszego, ale szybszego, aby wpisać wersję:

git log --graph --oneline
 438
Author: P Shved,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:24

: mam 3 aliasy (i 4 aliasy do szybkiego użycia) , które normalnie wrzucam do pliku ~/.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 wygląda tak:

Git lg1

git lg2 wygląda tak:

Git lg2

I git lg3 wygląda tak:

Git lg3

Uwaga: odpowiedź skopiowana i poprawiona po odpowiedzi na stackoverflow.com/questions/1057564/pretty-git-branch-graphs ponieważ jest to o wiele bardziej odpowiednie tutaj niż tam był.  Zostawiłam kopię na drugim pytaniu ze względów historycznych - jest teraz zamknięte, a odpowiedź jest odwołana przez kilka innych odpowiedzi.

 343
Author: Slipp D. Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:37

Do każdego z tych przepisów (opartych na git log lub gitk), możesz dodać --simplify-by-decoration, aby zwinąć nieciekawe liniowe Części historii. To sprawia, że dużo więcej topologii jest widocznych na raz. Teraz mogę zrozumieć wielkie historie, które byłyby niezrozumiałe bez tej opcji!

Poczułem potrzebę opublikowania tego, ponieważ nie wydaje się być tak znany, jak powinien być. Nie pojawia się w większości pytań o przepełnienie stosu dotyczących wizualizacji historii i zajęło mi to sporo czasu. / align = "center" bgcolor = "# e0ffe0 " / cesarz chin / / align = center / W końcu znalazłem to w tym Debian bug report. Pierwsza wzmianka o Stack Overflow wydaje się być ta odpowiedź autorstwa Antoine Pelisse.

 202
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:37

Gitk czasami bolesne dla mnie czytanie.

Tutaj wpisz opis obrazka

Zmotywuj mnie do napisania GitVersionTree .

Tutaj wpisz opis obrazka

 58
Author: checksum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-17 10:18:55

" 99.999% mojego czasu patrzy na historię przez git lg, A 0.001% jest przez git log"

Chcę udostępnić 2 aliasy logów, które mogą się przydać. (konfiguracja z .gitconfig)

[Alias]
     lg = log --graph --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
     hist = log --graph --full-history --all --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
  • git lg wyświetli bieżącą historię gałęzi.
  • git hist wyświetli całą historię gałęzi.
 45
Author: Yeo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-09 23:04:44

Lubię, z git log, do zrobienia:

 git log --graph --oneline --branches

(również z --all, do przeglądania zdalnych gałęzi)

Współpracuje z najnowszymi wydaniami Git: introduced od 1.6.3 (czw, 7 Maj 2009)

  • "--pretty=<style>" opcja do rodziny poleceń dziennika może być teraz zapisana jako " --format=<style>".
    Dodatkowo, --format=%formatstring jest krótką ręką dla --pretty=tformat:%formatstring.

  • "--oneline" jest synonimem "--pretty=oneline --abbrev-commit".

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
| | * 8183707 a first bug10 fix
| |/
| * e727105 a second evol for 2.0
| * 473d44e a main evol
|/
* b68c1f5 first evol, for making 1.0

Możesz również ograniczyć zakres wyświetlania dziennika (liczba zatwierdzeń):

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all -5
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix

(Pokaż tylko ostatnie 5 commitów)


Co mi się nie podoba w aktualnie wybranym rozwiązaniu to:

 git log --graph

Wyświetla zbyt wiele informacji (gdy chcę tylko spojrzeć na szybkie podsumowanie):

PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC <[email protected]>
| Date:   Sat Nov 14 13:42:20 2009 +0100
|
|     a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <[email protected]>
| Date:   Sat Nov 14 13:41:50 2009 +0100
|
|     a first bug10 fix
|

gitk jest świetny, ale zmusza mnie do opuszczenia sesji powłoki dla innego okna, podczas gdy wyświetlanie ostatnich n commitów szybko jest wystarczająco często.

 40
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-15 11:57:57

Spójrz na Gitkraken - wieloplatformowy GUI, który pokazuje topologię w przejrzysty sposób.

Topologia

Oto krótki samouczek wideo na temat niektórych zaawansowanych funkcji.

 36
Author: pylang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-11 11:56:50

Gitg to świetne narzędzie dla Linuksa, podobne do Gitx dla OS X. Po prostu uruchom 'gitg' w wierszu poleceń z gdzieś wewnątrz struktury drzewa repozytorium(tak samo z gitx).

 29
Author: Jack Senechal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-23 21:15:23

Uznałem "git-big-picture" za bardzo przydatny: https://github.com/esc/git-big-picture

Tworzy ładne wykresy 2D za pomocą dot / graphviz zamiast raczej liniowych," jednowymiarowych " widoków gitk i przyjaciele produkują. Opcja-i pokazuje punkty gałęzi i Scala commity, ale pomija wszystko pomiędzy.

 22
Author: Frank Osterfeld,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-25 20:20:23

Ładne narzędzie internetowe to ungit . Działa na dowolnej platformie, na której się znajduje.obsługa js & git. Istnieje wideo Jak to działa dla tych, którzy uważają, że tego rodzaju rzeczy łatwiejsze niż czytanie...

Tutaj wpisz opis obrazka

 21
Author: Sardathrion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-04 11:13:41

Spójrz na BranchMaster .

Napisałem go, aby wizualizować złożoną strukturę gałęzi, przez zwijanie wszystkich commitów między nimi w jedną linię. Liczby oznaczają liczbę commitów.

Tutaj wpisz opis obrazka

 16
Author: stroyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-22 07:36:49

Chichot rysuje ładne wykresy

 12
Author: Renat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-18 08:47:24

Tortoise git posiada narzędzie o nazwie "Revision Graph". Jeśli jesteś na Windows To jest tak proste, jak Kliknij prawym przyciskiem myszy na repo -- > Tortoise Git -- > Revision Graph.

 11
Author: Christian Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-06 08:38:56

Używam następujących aliasów.

[alias]
    lol = log --graph --decorate --pretty=oneline --abbrev-commit
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all

Ma więcej informacji w schemacie kolorów niż aliasy, które widziałem powyżej. Wydaje się również, że jest to dość powszechne, więc możesz mieć szansę na to, że istnieje w innym środowisku lub będzie w stanie wspomnieć o tym w rozmowie bez konieczności wyjaśniania tego.

Z zrzutami ekranu i pełnym opisem tutaj: http://blog.kfish.org/2010/04/git-lola.html

 10
Author: Lokist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-24 15:00:00

Nikt nie wspomniał tig? Nie składa gałęzi jak "BranchMaster", ale...

Jest szybki, działa w terminalu.

Ponieważ jest tak szybki (+sterowanie klawiaturą) dostajesz świetny UX, jest to prawie jak Moje" ls " dla katalogów zawierających repozytoria Gita.

Https://jonas.github.io/tig/

Posiada zwykłe skróty, / do wyszukiwania, itp.

Wykres zmian

(ps. jest to terminal w tle tego zrzutu ekranu, wygląda lepiej w dzisiejszych czasach, ale mój komputer odmawia zrobienia zrzutu ekranu, przepraszam)

(pps. Ja również używam gitkraken i ma naprawdę wyraźne wizualizacje, ale jest znacznie cięższy niż tig)

 7
Author: wires,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-21 23:25:56

Mam alias git log w {[2] } aby wyświetlić historię wykresu:

[alias]
l = log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'

Z aliasem w miejscu, git l pokaże coś takiego:

Tutaj wpisz opis obrazka

W Git 2.12+ możesz nawet dostosować kolory linii wykresu za pomocą log.graphColors Opcja konfiguracji.

Jeśli chodzi o format logów, jest podobny do --oneline, z dodaniem nazwy autora (respektując .mailmap) i względnej daty autora . Zauważ, że składnia %C(auto), która mówi Gitowi, aby używał domyślnych kolorów dla skrótu zatwierdzania, itd. jest obsługiwane w Git >= 1.8.3.

 7
Author: Eugene Yarmash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-17 07:35:54

Znalazłem ten wpis na blogu który pokazuje zwięzły sposób:

git log --oneline --abbrev-commit --all --graph --decorate --color

Zwykle tworzę alias dla powyższego polecenia:

alias gg='git log --oneline --abbrev-commit --all --graph --decorate --color'

I proste użycie gg.

 6
Author: Sadegh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-16 10:02:14

Mój ulubiony pseudonim, via .gitconfig, is:

graph = log --graph --color --all --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"
 6
Author: xero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-01 18:05:45

Dla użytkowników Mac, checkout (No kalambur zamierzony) darmowe, open source narzędzie GitUp: http://gitup.co/

Podoba mi się sposób wyświetlania wykresów, jest wyraźniejszy niż niektóre inne narzędzia, które widziałem.

Projekt jest tutaj: https://github.com/git-up/GitUp

Zrzut ekranu GitUp

 6
Author: Edward T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-31 00:03:20

Gitx jest również fantastycznym narzędziem wizualizacji, jeśli akurat jesteś na OS X.

 5
Author: kEND,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-03 17:59:55

Stary post, ale sprawdź SmartGit. Bardzo przypomina wizualizację gałęzi Tortoise HG i jest bezpłatna do użytku niekomercyjnego.

 5
Author: Frederik Struck-Schøning,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-16 09:23:15

Kolejna Komenda Git log. Ten z kolumnami o stałej szerokości :

git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short
 5
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-06 09:01:36

Dla użytkowników VSCode text editor , rozważ rozszerzenie Git History Extension autorstwa D. Jayamanne:

Tutaj wpisz opis obrazka

 3
Author: pylang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-05 23:42:47

W systemie Windows jest bardzo przydatne narzędzie , którego możesz użyć: git extensions. Jest to narzędzie gui i sprawia, że operacje Gita są bardzo łatwe.

Również jest open source.

Http://gitextensions.github.io

 2
Author: loneshark99,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-28 00:36:14

Próbowałem --simplify-by-decoration ale wszystkie moje połączenia nie są pokazane. Więc zamiast tego po prostu przycinam linie bez symboli " \ " i " / "w nagłówkach, zawsze zachowując linie z" ("wskazując gałęzie natychmiast po tym. Podczas wyświetlania historii gałęzi nie interesują mnie komentarze commit, więc je też usuwam. Kończę z następującym aliasem powłoki.

gbh () { 
    git log --graph --oneline --decorate "$@" | grep '^[^0-9a-f]*[\\/][^0-9a-f]*\( [0-9a-f]\|$\)\|^[^0-9a-f]*[0-9a-f]*\ (' | sed -e 's/).*/)/'
}
 1
Author: Isaac To,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-20 01:15:50

Oficjalna strona Git pobrała narzędzia GUI specyficzne dla platformy zewnętrznej. Hit tutaj narzędzia git GUI dla platformy Linux

Użyłem gitg i GitKraken dla platformy linux. Zarówno dobre, aby zrozumieć drzewo commit

 0
Author: rookie4evr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 20:54:01

Czy możemy to bardziej skomplikować?

A może proste git log --all --decorate --oneline --graph (remember A Dog = --All --Decorate --Oneline --Graph)

 0
Author: pixel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-02 23:27:51