2012-09-07 6 views
5

Tengo un alias de Git que tiene este aspecto:Alias ​​para confirmaciones sin accionar, sin importar en qué rama estoy?

[alias] 
     unpushed = log origin..HEAD --pretty=format:'%h %an %s' 

que trabaja grande para mostrar los cambios "unpushed" cuando estoy en el maestro. Pero este alias realmente no funciona bien cuando estoy en una sucursal.

¿Cuál sería el comando correcto para mostrar los cambios no realizados ya sea que esté o no en una sucursal?

+0

Parece que funciona bien para mí en una sucursal ... ¿Qué no funciona para usted? –

+0

Funciona, pero muestra cómo la rama se ha separado del maestro, no cómo mi copia local ha divergido de la corriente ascendente, que es lo que quiero. – slacy

Respuesta

5

Si lo que desea es ver las confirmaciones salientes de la rama actual, puede utilizar el siguiente:

git config alias.unpushed "log @{u}.. --pretty=format:'%h %an %s'" 

Esto hace que git log para mostrar todas las confirmaciones accesible desde HEAD excluyendo aquellos accesible desde la rama ascendente. El argumento @{u}.. es equivalente a @{u}..HEAD, y @{u} es una abreviatura de la confirmación ascendente de la rama actual (por ejemplo, origin/foo si la rama desprotegida es foo).

Si quieres ver todos los envíos unpushed de todas las ramas, hacer esto:

git config alias.unpushed "log --all --not --remotes --tags --pretty=format:'%h %an %s'" 

Las causas anteriores git log a caminar todas las referencias, pero parar en (excluya) referencias remotas (por ejemplo, origin/master) y etiquetas . Git no distingue entre etiquetas locales y remotas, por lo que lo anterior supone que todas las etiquetas son remotas (esto no siempre es cierto, por lo que es posible que desee omitir el argumento --tags a veces).

Yo personalmente uso los siguientes alias para mostrar compromete unpushed:

# unpushed: graph of everything excluding pushed/tag commits 
# with boundary commits (see below for 'git g' alias) 
git config alias.unpushed '!git g --not --remotes --tags' 

# go: _G_raph of _O_utgoing commits with boundary commits 
# (see below for 'git gb' alias) 
git config alias.go '!git gb @{u}..' 

# g: _G_raph of everything with boundary commits 
git config alias.g '!git gb --all' 

# gb: _G_raph of current _B_ranch (or arguments) with boundary commits 
git config alias.gb '!git gbnb --boundary' 

# gbnb: _G_raph of current _B_ranch (or arguments) with _N_o _B_oundary commits 
git config alias.gbnb 'log --graph --date-order --pretty=tformat:"%C(yellow)%h%Creset %C(magenta)%aE %ai%Creset %C(green bold)%d%Creset%n  %s"' 

Para repositorios simples que utilizan los git g alias como mi principal método de exploración de las confirmaciones. Para repositorios complejos (docenas de ramas), generalmente uso git gb para mostrar ramas específicas o rangos de confirmaciones. Cuando quiero ver cómo git push cambiará la referencia remota (mi push.default está configurado en upstream), uso git go. Cuando deseo ver si hay algo en algún lugar de mi repositorio local que no haya presionado (por ejemplo, para ver si perderé trabajo si elimino el clon), uso git unpushed.

1

Uso git-wtf para esta y otras preguntas.

1

Esto lo hará:

git config alias.unpushed "log $(git rev-parse --symbolic-full-name @{u})..HEAD --pretty=format:'%h %an %s'" 

se compara el nombre completo de la rama de seguimiento de aguas arriba (por ejemplo refs/remotes/origin/master) con HEAD. El nombre completo es un refspec válido para su operación de git promedio.

Si utiliza fetch en lugar de pull, y desea comete en ya sea rama pero no ambos, utilice la sintaxis ... en lugar de .. sintaxis en el comando.

+0

Funciona, pero en realidad no funciona, esto anuncia un alias para el árbol desprotegido.gitconfig, pero si cambio de ramas con "git checkout" el alias continúa refiriéndose a la rama anterior. No puedes poner expansiones de shell de estilo "$ (git ...)" directamente en ~/.gitconfig, que es lo que quiero. – slacy

+0

@slacy Ah sí, veo el error ahora. Subió la respuesta de Richard. – Christopher

Cuestiones relacionadas