No se puede mostrar un árbol Git en la terminal


439

El antiguo artículo de Killswitchcollective.com, 30 de junio de 2009 , tiene las siguientes entradas y salidas

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

Estoy interesado en cómo obtener la vista de árbol de las confirmaciones en su terminal sin usar Gitk o Gitx en OS / X.

¿Cómo puede obtener la vista de árbol de las confirmaciones en la terminal?


2
La pregunta no es importante, pero el artículo en cuestión ya no está disponible. Una copia en caché está disponible a través de Internet Archive: web.archive.org/web/20110831142839/http://…
Alan De Smet

Respuestas:


795

¿Cómo puede obtener la vista de árbol de las confirmaciones en la terminal?

git log --graph --oneline --all

Es un buen comienzo.

Puedes recibir algunas letras extrañas. Son códigos ASCII para colores y estructura. Para resolver este problema, agregue lo siguiente a su .bashrc:

export LESS="-R"

de modo que no necesite usar el filtro ASCII de Tig por

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

El gráfico basado en texto del artículo de Git-ready contiene otras opciones:

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

gráfico de registro de git

Con respecto al artículo que mencionas, iría con la respuesta de Pod : salida hecha a mano ad-hoc.


Jakub Narębski menciona en los comentarios tig , una interfaz de modo de texto basada en ncurses para git. Ver sus lanzamientos .
Agregó una --graphopción en 2007.


1
Acabo de probarlo en mi repositorio. Funciona pero estoy en Windows con MSysGit1.6.3.
VonC

files.getdropbox.com está bloqueado aquí en el trabajo :( Veré tu foto en aproximadamente una hora, hora de llegar a casa.
VonC

@Vonc: ahora escribí dos para el primer comando. Obtengo una vista similar a la de la imagen para el segundo comando.
Léo Léopold Hertz 준영

99
También hay 'tig', interfaz de modo de texto para git (usando ncurses), que tenía una vista gráfica del historial en la terminal antes de que existiera la opción '--graph' para git-log.
Jakub Narębski

2
Creo --decorateque también es indispensable en este tipo de visualización: muestra nombres de referencia (ramas, remotos y locales) junto con el nombre abreviado de confirmación.
Matt Enright

312

Una solución es crear un Alias ​​en tu .gitconfigy llamarlo fácilmente:

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

Y cuando lo llames la próxima vez, usarás:

git tree

Para ponerlo en su ~ / .gitconfig sin tener que editarlo, puede hacer lo siguiente:

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

(Si no usa --global, lo colocará en el .git / config de su repositorio actual).


1
¿Cómo es que este no es un alias predeterminado? Supongo que haría que la CLI de Git fuera un poco menos irritante de usar y no podemos tener eso ...
Timmmm

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

Un árbol visual con nombres de ramas incluidos.

Use esto para agregarlo como un alias

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

Lo llamas con

git tree

Git Tree


2
Muy bien, este. Lo uso en combinación con less -Slo descrito aquí , para evitar que las líneas envueltas ofusquen el árbol.
djvg

60

tig

Si quieres un árbol interactivo , puedes usarlo tig. Se puede instalar brewen OSX y apt-geten Linux.

brew install tig
tig

Esto es lo que obtienes:

ingrese la descripción de la imagen aquí


¿Puedes obtener un árbol como en la respuesta de VonC de Tig actualmente? Utilizamos Tig en la respuesta de VonC solo como filtro Ascii.
Léo Léopold Hertz 준영

4

Mantener sus comandos cortos los hará más fáciles de recordar:

git log --graph --oneline

1

Sugeriría a cualquiera que escriba el comando completo

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

en lugar de crear un alias.

Es bueno tener los comandos en tu cabeza, para que lo sepas de memoria, es decir, no dependas de alias cuando cambies de máquina.


2
Es en realidad git log --all --decorate --oneline --graph, después de la mnemónica git log a dog;)
VonC

@VonC El resultado final es el mismo. De todos modos, estoy de acuerdo contigo. Gracias por la respuesta.
Saxofonista

Sí, eso es lo que la carita sonriente ;)al final de mi comentario anterior intentaba (imperfectamente) transmitir: puede usar esas opciones en el orden que desee. Me parece divertido "registrar un perro" :)
VonC

1
O podrías scp ~/.bashrc root@remote:~/y tus alias se mueven muy rápido.
Administrar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.