Git - premi la scorciatoia del ramo corrente


365

Esiste una scorciatoia per dire a Git di portare l'origine del tracciamento corrente all'origine?
Nota: so che posso cambiare il comportamento push predefinito , ma sto cercando una soluzione ad hoc che non cambi il comportamento predefinito.

Ad esempio, supponiamo che io sia sul ramo feature/123-sandbox-testsche userò

git push origin feature/123-sandbox-tests

che è noioso. Sto cercando una scorciatoia, qualcosa del genere

git push origin current

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


Modifica : a partire dalla versione 2.0, il comportamento predefinito di git è cambiato in un comportamento più intuitivo, che è quello che volevo ottenere. Vedi questa domanda SO per i dettagli.

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

Risposte:


703

Secondo la git pushdocumentazione:

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

Quindi penso che ciò di cui hai bisogno sia git push origin HEAD. Inoltre, può essere utile git push -u origin HEADimpostare le informazioni di tracciamento a monte nella filiale locale, se non si è già passati all'origine.


11
Preferisco questo rispetto all'impostazione di push.default su semplice o corrente, perché macchine diverse potrebbero avere impostazioni diverse. Puoi abituarti a git pushspingere solo il ramo corrente, ma su altre macchine puoi spingere accidentalmente tutti i rami corrispondenti.
Wisbucky,

1
@wisbucky Ho diversi alias, tra cui co, quindi se dovessi provare a tirare giù e quindi controllare il codice senza il mio ~/.gitconfigfile su quella VM, lo saprò immediatamente. Questo mi fa sentire abbastanza sicuro nel cambiare l'impostazione push predefinita in upstream.
Damon,

9
Interessante che questo non funzioni solo con @, che è documentato come un alias valido per HEAD. (es. git push -u origin @)
void.pointer

197

Puoi configurare git per inviare al ramo corrente usando il seguente comando

git config --global push.default current

allora basta

git push 

questo invierà il codice al ramo corrente.


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

6
@DavidDoria 'current' non è un ramo chiamato qui.
Mahesh, l'

Meglio fare git push -u origin feature_branch_nameper impostare upstream / tracking! Se si utilizza almeno un repository remoto.
Flo

40

Dovresti dare un'occhiata a una domanda simile in Comportamento predefinito di "git push" senza un ramo specificato

Fondamentalmente spiega come impostare il comportamento predefinito per inviare il ramo corrente solo in esecuzione git push. Probabilmente quello che ti serve è:

git config --global push.default current

Altre opzioni:

  • niente : non spingere nulla
  • matching : spingere tutti i rami corrispondenti
  • upstream / tracking : spingi il ramo corrente verso qualunque cosa stia monitorando
  • corrente : spinge il ramo corrente

11

Uso tale alias nella mia configurazione .bashrc

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

Al comando $gpbprende il nome del ramo corrente e lo spinge verso l'origine.

Ecco i miei altri alias:

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

8

Per quello che vale, l'ultima scorciatoia:

Nel mio .bash_profileho alias push="git push origin HEAD", quindi ogni volta pushche scrivo so che sto spingendo verso il ramo in cui mi trovo.


6

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

Quindi puoi semplicemente utilizzare git pushper inviare tutte le modifiche. Per una risposta più completa, vedere la risposta accettata a una domanda simile qui.

Se si desidera solo inviare il ramo corrente con il comando push, è possibile modificare il comportamento push in upstream:

git config --global push.default upstream

Grazie, tuttavia in questo caso TUTTI i rami di tracciamento non verrebbero trasferiti all'origine?
Elad

Ho modificato la risposta, vedere il link, la risposta è più completa lì.
Faruk Sahin,

Ancora una volta, il problema è che tutti i rami che stanno seguendo i rami vengono spinti in quel modo. Come ho scritto nella mia domanda, il ramo è in primo luogo un ramo tracciato, quindi penso che l'impostazione del ramo a monte come suggerito sia ridondante. O mi sbaglio?
Elad,

Quindi puoi configurare git per inviare solo il ramo corrente modificando il comportamento di git push. git config --global push.default upstreamimposterà il comportamento push per spingere solo il ramo corrente.
Faruk Sahin,

5

Il modo più semplice: esegui git push -u origin feature/123-sandbox-testsuna volta. Ciò spinge il ramo nel modo in cui sei abituato a farlo e imposta anche le informazioni di tracciamento a monte nella tua configurazione locale. Successivamente, puoi semplicemente git pushspingere i rami tracciati verso i loro telecomandi a monte.

Puoi anche farlo tu stesso nella configurazione impostando branch.<branch name>.mergeil nome della diramazione remota (nel tuo caso lo stesso del nome locale) e, facoltativamente, branch.<branch name>.remoteil nome del telecomando che vuoi spingere (di default all'origine). Se guardi nella tua configurazione, molto probabilmente c'è già uno di questi set per master, quindi puoi seguire questo esempio.

Infine, assicurati di considerare l' push.defaultimpostazione. L'impostazione predefinita è "matching", che può avere risultati indesiderati e imprevisti. Molte persone che conosco trovano "a monte" più intuitivo, il che spinge solo l'attuale ramo.

I dettagli su ciascuna di queste impostazioni sono disponibili nella pagina man di git-config .

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

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

1

Con l'aiuto della risposta di ceztko ho scritto questa piccola funzione di supporto per semplificarmi la vita:

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 all'origine e imposta anche il ramo di tracciamento remoto se non è stato ancora impostato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.