Estoy jugando con git de forma aislada en mi propia máquina, y me resulta difícil mantener un modelo mental de todas mis ramas y commits. Sé que puedo hacer un git log
para ver el historial de commits desde donde estoy, pero ¿hay alguna forma de ver toda la topografía de la rama, algo así como esos mapas ascii que parecen usarse en todas partes para explicar las ramas?
.-A---M---N---O---P
/ / / / /
I B C D E
\ / / / /
`-------------'
Me parece que alguien que venga e intente coger mi repositorio tendría dificultades para saber exactamente lo que está pasando.
Supongo que estoy influenciado por AccuRev's stream browser...
git log --graph
o gitk
. (Ambos aceptan también --all
, que mostrará todas las ramas en lugar de sólo la actual).
Edición:
Para los nombres de las ramas y una vista compacta, prueba: git log --graph --decorate --oneline
Suelo utilizar
git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"
Con colores (si tu shell es Bash):
git log --graph --full-history --all --color \
--pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"
Esto imprimirá una representación basada en texto como esta:
* 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
(Podrías usar git log --format=oneline
, pero esto vinculará los mensajes de confirmación con números, lo que se ve menos bonito en mi opinión).
Para hacer un acceso directo a este comando, puedes editar tu archivo ~/.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"
Sin embargo, como señala Sodel el Vociferante en los comentarios, un comando de formato tan largo es difícil de memorizar. Normalmente, no es un problema ya que puedes ponerlo en el archivo ~/.gitconfig
. Sin embargo, si a veces tienes que entrar en una máquina remota donde no puedes modificar el archivo de configuración, podrías usar una versión más simple pero más rápida de escribir:
git log --graph --oneline
Me gusta, con git log
, hacer:
git log --graph --oneline --branches
(también con --all, para ver ramas remotas también)
Funciona con versiones recientes de Git: introducido desde 1.6.3 (Thu, 7 May 2009)
- La opción "
--pretty=<style>
" de la familia de comandos log ahora puede escribirse como "--format=<style>
".
Además,--format=%formatstring
es una abreviatura de--pretty=tformat:%formatstring
.
- **"
--oneline
" es un sinónimo de "--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
También puede limitar el lapso de visualización del registro (número de commits):
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
(mostrar sólo los últimos 5 commits)
Lo que no me gusta de la actual solución seleccionada es:
git log --graph
Muestra demasiada información (cuando sólo quiero ver un resumen rápido):
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
es genial, pero me obliga a dejar la sesión del shell por otra ventana, mientras que mostrar los últimos n commits rápidamente suele ser suficiente.