Git muestra todas las ramas (pero no alijos) en el registro

84

Tengo un alias de Git que se expande a:

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

Según man git loghay un par de opciones sospechosas: --noty --branches; pero no puedo hacer que funcione correctamente.

¿Cómo debo editar eso para ocultar los alijos?


FYI : según la pregunta y el comentario aceptados mi .gitconfigalias ahora se ve así:

[alias]
    l = log --branches --remotes --tags --graph --oneline --decorate --notes HEAD
Ciro
fuente

Respuestas:

125

En lugar de hacer --ally luego tratar de filtrar los alijos, nunca los incluyas en primer lugar:

git log --branches --remotes --tags --graph --oneline --decorate

El principal problema que surge al intentar filtrarlos después es que si el alijo es la última confirmación en esa rama (porque aunque no es el headde la rama, sigue siendo el descendiente más reciente de ella), en realidad puede filtrarse toda la rama del registro, que no es lo que desea.

Andrew Marshall
fuente
2
¡Excelente! Yo agregaría --tagspara completar.
cyrus
Sospecho --tagsque es redundante, ya que ninguna etiqueta debería ser descendiente headde una rama o remota, aunque no he verificado esto.
Andrew Marshall
3
Intenté esto git checkout -b test:; agregó un compromiso; git tag foo; git checkout master; git branch -D test. La etiqueta está ahí, pero no se mostrará sin ella --tags.
cyrus
2
Una pequeña adición: debes agregarla HEADal final. De lo contrario, si está en modo HEAD separado y no hay otros puntos de referencia para la confirmación HEAD, no lo verá en el gráfico.
mziwisky
6

Mi alias:

[alias]
    l = log --oneline --decorate --graph --exclude=refs/stash

En este caso, podrá utilizar estos formularios sin mostrar el alijo:

  • git l para la rama actual
  • git l feature234 para una rama específica
  • git l --all para la historia general

Del manual:

--exclude = <patrón global>

No incluya referencias que coincidan con las siguientes --all, --branches, --tags, --remotes o --glob que de otro modo considerarían.

cinco
fuente
4
Tenga en cuenta que el orden de los parámetros es importante: --all --exclude=refs/stashaún incluiría el alijo, mientras --exclude=refs/stash --allque lo excluiría correctamente.
Mikhail Burshteyn
4

Tenga en cuenta que la respuesta de Andrew no funcionaría para ocultar las ramas de StGit 1.)<branch>.stgit (de la versión 0.15 de StGit) que, de lo contrario, ensucian la salida y la hacen inutilizable.

Actualmente utilizo la siguiente solución:

$ git log --graph --oneline --decorate \
  $(git for-each-ref --format="%(refname)" refs/heads/ refs/remotes/ |
    grep -v "\.stgit$")

1.) StGit (" St acked Git ") proporciona una funcionalidad similar a Quilt / mq a Git (es decir, empujar / hacer estallar parches hacia / desde una pila).

Jakub Narębski
fuente
Considere usar --exclude. Me gusta:git log --graph --exclude=refs/heads/*.stgit --exclude=refs/patches/* --exclude=refs/stash --all
gavenkoa