2012-12-25 16 views
181

C'è una scorciatoia per dire a Git di spingere il ramo di tracciamento attuale verso l'origine?
Nota: So che posso modificare il default push behavior, ma sto cercando una soluzione ad-hoc che non modifica il comportamento predefinito.Git - push current shortcut corrente

Per esempio, supponiamo io sono sul ramo feature/123-sandbox-tests sarei usando

git push origin feature/123-sandbox-tests 

che è noioso. Sto cercando una scorciatoia, qualcosa come

git push origin current 

dove git sa che la corrente sia feature/123-sandbox-tests.


Edit: A partire dalla versione 2.0, predefinita il comportamento di Git è cambiato ad un comportamento più intuitivo, che è quello che volevo ottenere. Vedi This SO question per i dettagli.

Modifica 2: ceztko's answer è la risposta migliore in quanto consente di spingere il ramo corrente, indipendentemente dalle impostazioni.

risposta

366

Secondo git push documentazione:

git push origin HEAD 
    A handy way to push the current branch to the same name on the remote. 

Quindi penso che quello che vi serve è git push origin HEAD. Può anche essere utile git push -u origin HEAD impostare le informazioni di monitoraggio a monte nel ramo locale, se non è già stato spinto all'origine.

+4

Preferisco questo impostando push.default su simple o current, perché le macchine differenti potevano avere impostazioni diverse. Potresti abituarti a 'git push' solo spingendo il ramo corrente, ma su altre macchine, potresti accidentalmente spingere tutti i rami corrispondenti. – wisbucky

+0

@wisbucky Ho diversi alias, incluso 'co', quindi se dovessi provare a tirare giù e quindi estrarre il codice senza il mio file' ~/.gitconfig' su quella VM, lo saprò immediatamente. Questo mi permette di sentirmi abbastanza sicuro riguardo al fatto che il push push sia impostato su 'upstream'. – Damon

+4

Interessante che questo non funziona con solo '@', che è documentato come un alias valido per 'HEAD'. (es. 'git push -u origine @') –

5

Se si utilizza git 1.7.x, è possibile eseguire il comando seguente per impostare il ramo di tracciamento remoto.

git branch --set-upstream feature/123-sandbox-tests origin/feature/123-sandbox-tests 

Poi si può semplicemente utilizzare git push per spingere tutte le modifiche. Per una risposta più completa, si prega di vedere il accepted answer to a similar question here.

Se si desidera solo spingere il ramo corrente con il comando di spinta, quindi è possibile modificare il comportamento spinta a monte:

git config --global push.default upstream 
+0

Grazie, tuttavia in questo caso sarebbe non tutti i rami di tracciamento essere spinto alla loro origine? – Elad

+0

Ho modificato la risposta, per favore vedi il link, la risposta è più completa lì. –

+0

Anche in questo caso, il problema è che tutti i rami dei rami di rilevamento vengono spinti in quel modo. Come ho scritto nella mia domanda, il ramo è un ramo tracciato in primo luogo, quindi penso che l'impostazione del ramo upstream come suggerito sia ridondante. O mi sbaglio? – Elad

5

Il modo più semplice: run git push -u origin feature/123-sandbox-tests una volta. Questo spinge il ramo nel modo in cui sei abituato a farlo e imposta anche le informazioni di tracciamento a monte nella tua configurazione locale. Dopodiché, puoi semplicemente aggiungere git push ai rami upstream dei loro upstream.

È inoltre possibile eseguire questa operazione nella configurazione impostando branch.<branch name>.merge nel nome del ramo remoto (nel tuo caso uguale al nome locale) e facoltativamente, branch.<branch name>.remote nel nome del telecomando a cui si desidera passare (impostazione predefinita origine). Se guardi nella tua configurazione, probabilmente c'è già uno di questi set per master, quindi puoi seguire quell'esempio.

Infine, assicurarsi di considerare l'impostazione push.default. Per impostazione predefinita "corrispondenza", che può avere risultati indesiderati e inaspettati. La maggior parte delle persone che conosco trovano "upstream" più intuitivo, che spinge solo il ramo attuale.

I dettagli su ciascuna di queste impostazioni sono disponibili in git-config man page.

Ripensandoci, rileggendo la tua domanda, penso che tu sappia tutto questo. Penso che quello che stai effettivamente cercando non esista.Che ne dite di una funzione di bash qualcosa di simile (non testata):

function pushCurrent { 
    git config push.default upstream 
    git push 
    git config push.default matching 
} 
3

Per quello che vale, il collegamento finale:

Nel mio .bash_profile devo alias push="git push origin HEAD", così ogni volta che scriv push so che sto spingendo al ramo corrente sto.

+0

Questo potrebbe causare problemi quando si usano altri comandi 'git push' ... –

0

Con l'aiuto di risposta di ceztko Ho scritto questa piccola funzione di supporto per rendere la mia vita più facile:

function gpu() 
{ 
    if git rev-parse --abbrev-ref --symbolic-full-name @{u} > /dev/null 2>&1; then 
     git push origin HEAD 
    else 
     git push -u origin HEAD 
    fi 
} 

Spinge il ramo corrente di provenienza e anche imposta la filiale di monitoraggio a distanza, se non è stato configurato ancora.

7

Si dovrebbe dare un'occhiata a una domanda simile in Default behavior of "git push" without a branch specified

Fondamentalmente si spiega come impostare il comportamento predefinito per spingere la vostra filiale corrente solo l'esecuzione di git push. Probabilmente quello che vi serve è:

git config --global push.default current

Altre opzioni:

  • niente: Non spingere nulla
  • corrispondenza: Spingere tutti i rami corrispondenti
  • monte/tracking: P Spingete il ramo corrente di tutto ciò che sta rintracciando
  • corrente: Spingere il ramo corrente
71

Puoi configure git a spingere al ramo corrente utilizzando il seguente comando

git config --global push.default current 

poi basta fare

git push 

questo spingerà il c ode al tuo attuale ramo.

+0

Ha senso aggiungere' push = refs/heads/current: refs/per/master/current 'in una sezione 'remota' in .git/config? Cioè, è 'corrente' una parola speciale qui? O cercherà un ramo chiamato "corrente"? –

+2

@DavidDoria 'current' non è un ramo chiamato qui. – Mahesh

2

io uso questi alias nel mio .bashrc config

alias gpb='git push origin `git rev-parse --abbrev-ref HEAD`' 

Al comando $gpb prende il nome del ramo corrente e lo spinge alle origini.

qui sono i miei altri alias:

alias gst='git status' 
alias gbr='git branch' 
alias gca='git commit -am' 
alias gco='git checkout'