2010-03-10 14 views
88

Ahora, cuando escribo "git branch"Salida de la rama git en forma de árbol

enumera mis ramas en un orden arbitrario.

Lo que yo prefiero sería si "git branch" aparece mi producción en un árbol como pantuflas, somethign como:

master 
|-- foo 
    |-- foo1 
    |-- foo2 
|-- bar 
    |-- bar4 

Donde aquí, foo & bar eran ramificado de maestro; foo1 & foo2 se ramificaron desde foo; bar4 se ramificó de la barra.

¿Es esto fácil de lograr?

[Utilidades de línea de comandos solamente. Esto tiene que encajar en mi zsh flujo de trabajo/vim]

Respuesta

106

El answer below utiliza git log:.

I mencionado un enfoque similar en 2009 con "Unable to show a Git tree in terminal":

git log --graph --pretty=oneline --abbrev-commit 

Pero el lleno tengo estado utilizando se encuentra en "How to display the tag name and branch name using git log --graph" (2011):

git config --global alias.lgb "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset%n' --abbrev-commit --date=relative --branches" 

git lgb 

Respuesta original (2010)

git show-branch --list viene cerca de lo que busca (con el fin topo)

--topo-order 

Por defecto, las ramas y sus confirmaciones se muestran en orden cronológico inverso.
Esta opción hace que aparezcan en orden topológico (es decir, las confirmaciones de descendientes se muestran antes que sus padres).

Pero la herramienta git wtf puede help too. Ejemplo:

$ git wtf 
Local branch: master 
[ ] NOT in sync with remote (needs push) 
    - Add before-search hook, for shortcuts for custom search queries. [4430d1b] ([email protected]; 7 days ago) 
Remote branch: origin/master ([email protected]:sup/mainline.git) 
[x] in sync with local 

Feature branches: 
{ } origin/release-0.8.1 is NOT merged in (1 commit ahead) 
    - bump to 0.8.1 [dab43fb] ([email protected]; 2 days ago) 
[ ] labels-before-subj is NOT merged in (1 commit ahead) 
    - put labels before subject in thread index view [790b64d] ([email protected]; 4 weeks ago) 
{x} origin/enclosed-message-display-tweaks merged in 
(x) experiment merged in (only locally) 

NOTE: working directory contains modified files 

git-wtf se muestra:

  • Cómo su rama se relaciona con el repositorio remoto, si se trata de una rama de seguimiento.
  • Cómo se relaciona su sucursal con las ramas sin característica ("versión"), si se trata de una rama de característica.
  • Cómo su rama se refiere a las ramas de características, si se trata de una rama versión
+0

estado usando una variación de su formato bonita que muestra el correo electrónico autor también, usando% ae. También prefiero llamar al alias por "sl" para que se parezca al smartlog de hg. – fiorix

+0

Muchas gracias por el enlace a la herramienta 'git-wtf', es terriblemente útil. Parece esencialmente desglosar las conclusiones que sacaría de mirar a un elegante árbol 'git log', pero en un buen resumen. –

8

Se puede utilizar una herramienta llamada gitk.

+0

Me encanta gitk, pero no descubrí '' 'gitk''' en Mac. Si tienes alguna sugerencia, házmelo saber. Empecé a usar '' 'Github Desktop''' pero me encanta trabajar en línea de comandos. –

105

No es exactamente lo que pidieron, pero

git log --graph --simplify-by-decoration --pretty=format:'%d' --all 

hace un muy buen trabajo. Muestra etiquetas y ramas remotas también.Esto puede no ser deseable para todos, pero lo encuentro útil. --simplifiy-by-decoration es el gran truco aquí para limitar los refs mostrados.

Uso un comando similar para ver mi registro. He sido capaz de sustituir por completo el uso de mi gitk con él:

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

lo uso mediante la inclusión de estos alias en mi archivo ~/.gitconfig:

[alias] 
    l = log --graph --oneline --decorate 
    ll = log --graph --oneline --decorate --branches --tags 
    lll = log --graph --oneline --decorate --all 

Editar: Actualizado registro sugerido comando/alias para usar banderas de opciones más simples.

+1

IMO esta es la mejor respuesta aquí, pero creo que [SourceTree] (http://sourcetreeapp.com/) o gitk o similar es el camino a seguir para este tipo de cosas. – JaKXz

+0

Esto muestra las ramas en el origen. ¿Hay alguna forma de mostrar esto para las sucursales locales? – Jeff

+0

@Jeff reemplazando '--all' con' --branches --tags' probablemente lo haga. – nocash

7

El siguiente ejemplo muestra cometer los padres, así:

git log --graph --all \ 
--format='%C(cyan dim) %p %Cred %h %C(white dim) %s %Cgreen(%cr)%C(cyan dim) <%an>%C(bold yellow)%d%Creset' 
+1

No funciona en Windows. –