Visualizando la topología de la rama en Git
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 confirmaciones. Sé que puedo git log
ver el historial de confirmaciones desde donde estoy, pero ¿hay alguna manera de ver la topografía completa de la rama, algo así como estos mapas ASCII que parecen usarse en todas partes para explicar las ramas?
.-A---M---N---O---P
/ / / / /
I B C D E
\ / / / /
`-------------'
Simplemente se siente como si alguien viniera e intentara recuperar mi repositorio y tuviera dificultades para descubrir exactamente qué estaba pasando.
Supongo que estoy influenciado por el navegador de transmisiones de AccuRev ...
Utilice git log --graph
o gitk
. (Ambos también aceptan --all
, lo que mostrará todas las ramas en lugar de solo la actual).
Para nombres de sucursales y una vista compacta, intente:
git log --graph --decorate --oneline
Tengo 3 alias (y 4 alias-alias para uso rápido) que normalmente incluyo en mi ~/.gitconfig
archivo:
[alias]
lg = lg1
lg1 = lg1-specific --all
lg2 = lg2-specific --all
lg3 = 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
Se ve como esto:
git lg2
Se ve como esto:
y git lg3
se ve así:
Cabe señalar que esto no pretende ser una solución definitiva: es una plantilla que usted puede cambiar, agregar y arreglar a su gusto. Si desea utilizarlos, mi recomendación es:
- Agrégalos a tu
.gitconfig
, - Personalízalo a tu gusto (diferentes opciones de color, diferentes disposiciones de líneas para las versiones de 2 y 3 líneas, etc.),
- Y luego guarde una copia en Gist u otra herramienta de fragmentos de código para poder copiarla y pegarla en
.gitconfig
correos electrónicos en el futuro (o, alternativamente, controlar la versión de sus archivos de puntos, por supuesto) .
Nota: Respuesta copiada y mejorada de la respuesta en stackoverflow.com/questions/1057564/pretty-git-branch-graphs ya que es mucho más apropiada aquí que allí. Dejé la copia de la otra pregunta por razones históricas: ahora está cerrada y muchas otras respuestas hacen referencia a la respuesta.
Yo suelo usar
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) Manual 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 successfully
| * 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 vinculará los mensajes de confirmación a números, lo que parece menos bonito en mi humilde opinión).
Para crear un acceso directo para este comando, es posible que desee editar su ~/.gitconfig
archivo:
[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 the Vociferous en los comentarios, un comando de formato tan largo es difícil de memorizar. Generalmente, no es un problema ya que puedes ponerlo en el ~/.gitconfig
archivo. Sin embargo, si a veces tienes que iniciar sesión en una máquina remota donde no puedes modificar el archivo de configuración, puedes usar una versión más simple pero más rápida de escribir:
git log --graph --oneline
A cualquiera de estas recetas (basadas en git log o gitk), puede agregarle --simplify-by-decoration
colapsar partes lineales poco interesantes del historial. Esto hace que mucha más topología sea visible a la vez. ¡Ahora puedo entender grandes historias que serían incomprensibles sin esta opción!
Sentí la necesidad de publicar esto porque no parece ser tan conocido como debería ser. No aparece en la mayoría de las preguntas de Stack Overflow sobre la visualización del historial, y me llevó bastante buscar encontrarlo, ¡incluso después de saber que lo quería! Finalmente lo encontré en este informe de error de Debian . La primera mención en Stack Overflow parece ser esta respuesta de Antoine Pelisse.