Visualizando la topología de la rama en Git

Resuelto Benjol asked hace 15 años • 33 respuestas

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 logver 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 ...

Benjol avatar Dec 03 '09 16:12 Benjol
Aceptado

Utilice git log --grapho 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
jrockway avatar Dec 03 '2009 09:12 jrockway

Tengo 3 alias (y 4 alias-alias para uso rápido) que normalmente incluyo en mi ~/.gitconfigarchivo:

[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 lg1Se ve como esto:

git lg1

git lg2Se ve como esto:

git lg2

y git lg3se ve así:

git lg3

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:

  1. Agrégalos a tu .gitconfig,
  2. Personalízalo a tu gusto (diferentes opciones de color, diferentes disposiciones de líneas para las versiones de 2 y 3 líneas, etc.),
  3. Y luego guarde una copia en Gist u otra herramienta de fragmentos de código para poder copiarla y pegarla en .gitconfigcorreos 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.

Slipp D. Thompson avatar Dec 25 '2015 23:12 Slipp D. Thompson

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 ~/.gitconfigarchivo:

[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 ~/.gitconfigarchivo. 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
P Shved avatar Dec 03 '2009 10:12 P Shved

A cualquiera de estas recetas (basadas en git log o gitk), puede agregarle --simplify-by-decorationcolapsar 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.

Andrew avatar Sep 22 '2011 03:09 Andrew