Impossibile mostrare un albero Git nel terminale


440

Il vecchio articolo di Killswitchcollective.com, il 30 giugno 2009 , contiene i seguenti input e output

git co master
git merge [your_branch]
git push

upstream    A-B-C-D-E            A-B-C-D-E-F-G
                 \        ---->               \
your branch       C-D-E                        G

Sono interessato a come si ottiene la visualizzazione ad albero delle commit nel proprio terminale senza usare Gitk o Gitx in OS / X.

Come è possibile ottenere la visualizzazione ad albero degli commit nel terminale?


2
Non è importante per la domanda, ma l'articolo in questione non è più disponibile. Una copia cache è disponibile tramite Internet Archive: web.archive.org/web/20110831142839/http://…
Alan De Smet

Risposte:


796

Come è possibile ottenere la visualizzazione ad albero degli commit nel terminale?

git log --graph --oneline --all

è un buon inizio.

Potresti ricevere delle strane lettere. Sono codici ASCII per colori e struttura. Per risolvere questo problema aggiungi quanto segue al tuo .bashrc:

export LESS="-R"

tale che non è necessario utilizzare il filtro ASCII di Tig da

git log --graph --pretty=oneline --abbrev-commit | tig   // Masi needed this 

Il grafico basato sul testo dell'articolo di Git-ready contiene altre opzioni:

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

grafico log git

Per quanto riguarda l'articolo che citi, vorrei andare con la risposta di Pod : output fatto a mano ad hoc.


Jakub Narębski menziona nei commenti tig , un'interfaccia in modalità testo basata su ncurses per git. Guarda le loro versioni .
Essa ha aggiunto un'opzione nel 2007.--graph


1
L'ho appena provato sul mio repository. Funziona ma sono su Windows con MSysGit1.6.3.
VonC,

files.getdropbox.com è bloccato qui al lavoro :( vedrò la tua foto tra circa un'ora, ora di tornare a casa.
VonC

@Vonc: ora ne ho digitati due per il primo comando. Ho una visione simile a quella dell'immagine per il secondo comando.
Léo Léopold Hertz

9
C'è anche un'interfaccia 'tig', in modalità testo per git (usando ncurses), che aveva una vista grafica cronologica nel terminale prima che ci fosse l'opzione '--graph' per git-log.
Jakub Narębski,

2
Trovo --decorateche sia indispensabile anche su questo tipo di display: mostra i nomi di riferimento (filiali, remoto e locale) accanto al nome del commit abbreviato.
Matt Enright,

312

Una soluzione è creare un Alias ​​nel tuo .gitconfige chiamarlo facilmente:

[alias]
    tree = log --graph --decorate --pretty=oneline --abbrev-commit

E quando lo chiami la prossima volta, utilizzerai:

git tree

Per inserirlo nel tuo ~ / .gitconfig senza doverlo modificare, puoi fare:

git config --global alias.tree "log --graph --decorate --pretty=oneline --abbrev-commit"  

(Se non usi --global, questo lo inserirà nel .git / config del tuo attuale repository.)


1
In che modo questo non è un alias predefinito? Immagino che renderebbe la CLI di Git leggermente meno esasperante da usare e non possiamo averlo ...
Timmmm,

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

Un albero visivo con nomi di rami inclusi.

Usa questo per aggiungerlo come alias

git config --global alias.tree "log --oneline --decorate --all --graph"

Lo chiami con

git tree

Git Tree


2
Molto bello, questo. Lo uso in combinazione con less -Scome descritto qui , per evitare che le linee avvolte offuscino l'albero.
djvg,

60

tig

Se vuoi un albero interattivo , puoi usarlo tig. Può essere installato brewsu OSX e apt-getin Linux.

brew install tig
tig

Questo è ciò che ottieni:

inserisci qui la descrizione dell'immagine


Riesci a ottenere un albero come nella risposta di VonC di Tig attualmente? Usiamo Tig nella risposta di VonC solo come filtro Ascii.
Léo Léopold Hertz 준영

4

Mantenere i comandi brevi renderà più facile ricordare:

git log --graph --oneline

1

Suggerirei a chiunque di scrivere il comando completo

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

piuttosto che creare un alias.

È bene avere i comandi in testa, quindi lo sai a memoria, cioè non dipendere dagli alias quando cambi macchina.


2
In realtà è git log --all --decorate --oneline --graph, dopo il mnemonico git log a dog;)
VonC

@VonC Il risultato finale è lo stesso. Ad ogni modo, sono d'accordo con te. Grazie per il feedback.
Sassofonista

Sì, è quello che la faccina ;)alla fine del mio commento precedente stava cercando (in modo imperfetto) di trasmettere: puoi usare quell'opzione nell'ordine che preferisci. Ho appena trovato divertente "log a dog" :)
VonC

1
Oppure potresti scp ~/.bashrc root@remote:~/e i tuoi alias si muovono molto velocemente.
Gestisci
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.