tipos - Visualización de topología de rama en git.
git ver archivos modificados (28)
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 compromisos. Sé que puedo hacer un git log
para ver el historial de confirmaciones desde donde estoy, pero ¿hay alguna forma de ver la topografía completa de las sucursales, algo así como estos mapas ASCII que parecen usarse en todas partes para explicar las sucursales?
.-A---M---N---O---P
/ / / / /
I B C D E
/ / / / /
`-------------''
Simplemente se siente como si alguien viniera y tratara de recoger mi repositorio tendría dificultades para averiguar exactamente qué estaba pasando.
Supongo que estoy influenciado por el navegador de secuencias de AccuRev ...
"El 99,999% de mi tiempo está mirando la historia por git lg
y el 0,001% es por git log
"
Solo quiero compartir 2 alias de registro que puedan ser útiles. (configurar desde .gitconfig)
[Alias]
lg = log --graph --pretty=format:''%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset'' --date=short
hist = log --graph --full-history --all --pretty=format:''%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset'' --date=short
-
git lg
verá el historial de la rama actual. -
git hist
verá toda la historia de la rama.
¿Podemos hacerlo más complicado?
¿Qué tal un simple registro de git --todo - decorar --oneline --graph (recuerda A Dog = --Todo --Decorar --Oneline --Graph)
A cualquiera de estas recetas (basadas en git log o gitk), puede agregar --simplify-by-decoration
para colapsar las partes lineales poco interesantes del historial. Esto hace mucho más visible a la vez la topología. ¡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 sobre el desbordamiento de pila sobre la visualización de la historia, y me costó un poco de búsqueda, ¡incluso después de saber que lo quería! Finalmente lo encontré en este informe de error de Debian . La primera mención de parece ser esta respuesta de Antoine Pelisse.
Antiguo post, pero echa un vistazo a SmartGit
. Recuerda mucho a la visualización de la rama Tortoise HG y es gratis para uso no comercial.
Echa un vistazo a BranchMaster .
Lo escribí para visualizar una estructura de rama compleja, al contraer todas las confirmaciones entre ellas en una sola línea. Los números indican el número de confirmaciones.
Eche un vistazo a Gitkraken , una GUI multiplataforma que muestra la topología de forma lúcida.
Aquí hay un video tutorial rápido sobre algunas características avanzadas.
El sitio oficial de Git alistó algunas herramientas de GUI específicas de plataformas de terceros. Haga clic aquí git GUI Tools para la plataforma Linux
He utilizado gitg
y GitKraken
para la plataforma linux. Ambos buenos para entender el arbol de compromiso
En Windows hay una herramienta muy útil que puedes usar: extensiones git. Es una herramienta gui y hace que las operaciones de git sean muy fáciles.
También es de código abierto.
Encontré "git-big-picture" bastante útil: github.com/esc/git-big-picture
Crea bonitos gráficos en 2D usando dot / graphviz en lugar de las vistas bastante lineales "unidimensionales" que producen Gitk y los amigos. Con la opción -i muestra los puntos de bifurcación y confirma las combinaciones, pero deja de lado todo lo que está en el medio.
Encontré esta publicación de blog que muestra una forma concisa:
git log --oneline --abbrev-commit --all --graph --decorate --color
Normalmente creo un alias para el comando anterior:
alias gg=''git log --oneline --abbrev-commit --all --graph --decorate --color''
y simple solo usa gg
.
Gitx también es una herramienta de visualización fantástica si estás en OS X.
He intentado --simplify-by-decoration
pero no se muestran todas mis --simplify-by-decoration
. Así que en lugar de eso, simplemente recorte las líneas sin los símbolos "/" y "/" en los encabezados, mientras que siempre mantengo las líneas con "(" que indican las ramas inmediatamente después de eso. Al mostrar el historial de las sucursales, en general no estoy interesado en comentar comentarios, por lo Los quito también. Termino con el siguiente alias de shell.
gbh () {
git log --graph --oneline --decorate "$@" | grep ''^[^0-9a-f]*[///][^0-9a-f]*/( [0-9a-f]/|$/)/|^[^0-9a-f]*[0-9a-f]*/ ('' | sed -e ''s/).*/)/''
}
Me gusta, con git log
, hacer:
git log --graph --oneline --branches
(también con --todos, para ver ramas remotas también)
Trabaja con versiones recientes de Git: introducido desde 1.6.3 ( jue, 7 de mayo de 2009 )
La
--pretty=<style>
"--pretty=<style>
" en la familia de comandos de registro ahora se puede escribir como "--format=<style>
".
Además,--format=%formatstring
es una mano corta para--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 intervalo de la visualización del registro (número de confirmaciones):
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 solo los últimos 5 confirmaciones)
Lo que no me gusta de la solución seleccionada actual es:
git log --graph
Mostró demasiada información (cuando solo 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 abandonar la sesión de shell para otra ventana, mientras que mostrar las últimas n confirmaciones es a menudo suficiente.
Mi alias favorito personal, a través de .gitconfig, es:
graph = log --graph --color --all --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"
Nadie mencionó tig
? No dobla ramas como "BranchMaster", pero ...
Es rápido, corre en la terminal.
Debido a que es tan rápido (+ control del teclado) que obtienes un gran UX, es casi como mi " ls
" para directorios que contienen repositorios git.
Tiene los accesos directos habituales, /
para buscar, etc.
(ps. es el terminal en el fondo de esta captura de pantalla, se ve mejor hoy en día, pero mi computadora se niega a tomar una captura de pantalla, lo siento)
(pps. También uso gitkraken y tiene visualizaciones muy claras, pero es mucho más pesado que tig
)
Otro comando git log. Este con columnas de ancho fijo :
git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short
Para aquellos que usan el editor de texto VSCode , considere la extensión Git History de D. Jayamanne:
Para los usuarios de Mac, haga clic en la herramienta gratuita y de código abierto GitUp: http://gitup.co/
Me gusta la forma en que se muestran los gráficos, es más claro que algunas de las otras herramientas que he visto.
El proyecto está aquí: https://github.com/git-up/GitUp
Suelo usar
git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"
Con colores (si tu concha 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ía simplemente usar git log --format=oneline
, pero vinculará los mensajes de confirmación con los 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 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 the Vociferous en los comentarios, este comando de formato largo es difícil de memorizar. Por lo general, no es un problema, ya que puede colocarlo en el archivo ~/.gitconfig
. Sin embargo, si a veces tiene que iniciar sesión en una máquina remota donde no puede modificar el archivo de configuración, podría usar una versión más simple pero más rápida para escribir:
git log --graph --oneline
Tengo este alias de git log
en ~/.gitconfig
para ver el historial del gráfico:
[alias]
l = log --all --graph --pretty=format:''%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)''
Con el alias en su lugar, git l
mostrará algo como esto:
En Git 2.12 + puede incluso personalizar los colores de línea del gráfico usando la opción de configuración log.graphColors
.
En cuanto al formato de los registros, es similar a --oneline
, con la adición del nombre del autor (que respeta .mailmap
) y la fecha del autor relativa . Tenga en cuenta que la sintaxis %C(auto)
, que le indica a Git que use los colores predeterminados para el hash de confirmación, etc., es compatible con Git> = 1.8.3 .
Yo uso los siguientes alias.
[alias]
lol = log --graph --decorate --pretty=oneline --abbrev-commit
lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
Tiene más información en la combinación de colores que los alias que vi arriba. También parece ser bastante común, por lo que puede tener la posibilidad de que exista en el entorno de otro o de poder mencionarlo en una conversación sin tener que explicarlo.
Con capturas de pantalla y una descripción completa aquí: http://blog.kfish.org/2010/04/git-lola.html
Giggle dibuja bonitos gráficos
Tortoise Git tiene una herramienta llamada "Revisión gráfica". Si está en Windows, es tan fácil como hacer clic derecho en su repositorio -> Tortoise Git -> Revision Graph.
Gitg es una gran herramienta para Linux, similar a Gitx para OS X. Simplemente ejecute ''gitg'' en la línea de comandos desde algún lugar dentro de la estructura de árbol de su repositorio (igual que con gitx).
Gitk
alguna vez me duele leer.
GitVersionTree a escribir GitVersionTree .
git log --graph
o gitk
. (Ambos también aceptan --all
, que mostrará todas las sucursales en lugar de solo la actual).
Edición: para nombres de bifurcaciones y una vista compacta, pruebe: git log --graph --decorate --oneline
2 ¢ : tengo 3 alias (y 4 alias-alias para uso rápido) que normalmente ~/.gitconfig
en mi archivo ~/.gitconfig
:
[alias]
lg = !"git lg1"
lg1 = !"git lg1-specific --all"
lg2 = !"git lg2-specific --all"
lg3 = !"git 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
ve así:
git lg2
tiene este aspecto:
y git lg3
ve así:
Nota: la respuesta copió y mejoró la respuesta en .com/questions/1057564/pretty-git-branch-graphs ya que es mucho más apropiado aquí de lo que era allí. Deje la copia en la otra pregunta por razones históricas: está cerrada ahora, y las respuestas hacen referencia a un montón de otras respuestas.