2013-09-23 22 views
7

Come esempio si supponga di voler scrivere un alias git, che mostra la differenza tra il ramo corrente e il suo partner origin.Riferimento ramo corrente e origine/<current> nell'alias git

Nel caso specifico del maestro sarebbe simile al seguente:

[alias] 
    top = log --oneline --graph --decorate master ^origin/master 

Come sostituire master?

risposta

16

Se la versione git non è ridicolmente vecchia, la stringa @{u} significa "upstream", cioè, qualsiasi origine/foo il ramo corrente sta tracciando. (E: HEAD significa "il ramo corrente, se su un ramo", e omettendo qualcosa nella sintassi .. significa HEAD.) Così, @{u}.. significa "tutto nella testa che non è nel suo monte":

[alias] 
    top = log --oneline --graph --decorate @{u}.. 
+2

Puoi collegare qualche documentazione? Come fai a sapere che "@ {u}" significa upstream? E ci sono altre opzioni '@ {...}'? – erikbwork

+2

Sì, i posti da cercare sono nella documentazione di ['git-rev-parse'] (https://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html) e ['git-rev-list'] (https://www.kernel.org/pub/software/scm/git/docs/git-rev-list.html). Ci sono un sacco di opzioni di sintassi funky, io uso 'rev ^' tutto il tempo e 'rev^{commit}' raramente, per esempio, e sto ancora cercando di iniziare ad usare 'branch @ {n}' di più. – torek

+0

+1: Lei signore è una specie di mago ... –

2

Un modo per farlo:

[alias] 
    top = "!git log --oneline --graph --decorate `git rev-parse --abbrev-ref HEAD` ^origin/`git rev-parse --abbrev-ref HEAD`" 

che si trasforma alias in un comando di shell, che offre la possibilità ai comandi nido.

+2

Questo presume che se si è sul ramo 'pippo' la versione upstream è' origine/pippo', il che è ragionevole dato il modo in cui viene posta la domanda. Tuttavia, è possibile che l'attuale upstream, se presente, sia 'origin/bar' o forse' other-remote/foo' o anche 'other-remote/bar'. Suggerisco anche di usare 'git symbolic-ref --abbrev HEAD' nel caso in cui' HEAD' sia staccato, anche se questo porta la domanda su come fallire con garbo :-) – torek

+1

@torek Vuoi dire 'git symbolic-ref - breve HEAD', giusto? – erikbwork

+1

@ erikb85: ehm, sì, avevo '--abbrev-ref' bloccato nella mia testa o qualcosa del genere; simbolico ha bisogno di '--short' qui .. – torek