Git - pousser le raccourci de la branche courante

365

Existe-t-il un raccourci pour indiquer à Git de pousser la branche de suivi actuelle vers l'origine?
Remarque: je sais que je peux modifier le comportement de transmission par défaut , mais je recherche une solution ad hoc qui ne modifie pas le comportement par défaut.

Par exemple, supposons que je sois sur une branche que feature/123-sandbox-testsj'utiliserais

git push origin feature/123-sandbox-tests

ce qui est fastidieux. Je cherche un raccourci, quelque chose comme

git push origin current

où git sait que le courant est feature/123-sandbox-tests.


Edit : à partir de la version 2.0, le comportement par défaut de git est devenu un comportement plus intuitif, ce que je voulais réaliser. Voir cette question SO pour plus de détails.

Edit 2 : la réponse de ceztko est la meilleure réponse car elle permet de pousser la branche courante, quels que soient les paramètres.

Elad
la source

Réponses:

704

Selon la git pushdocumentation:

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

Je pense donc que ce dont vous avez besoin est git push origin HEAD. Il peut également être utile git push -u origin HEADde définir des informations de suivi en amont dans la branche locale, si vous n'avez pas déjà poussé vers l'origine.

ceztko
la source
11
Je préfère cela à la configuration de push.default sur simple ou actuel, car différentes machines peuvent avoir des paramètres différents. Vous pouvez vous habituer à git pushne pousser que la branche actuelle, mais sur d'autres machines, vous pouvez accidentellement pousser toutes les branches correspondantes.
wisbucky
1
@wisbucky J'ai plusieurs alias, y compris co, donc si je devais même essayer de dérouler puis d'extraire du code sans mon ~/.gitconfigfichier sur cette VM, je le saurai immédiatement. Cela me permet de me sentir assez en sécurité pour changer la valeur par défaut de push en upstream.
Damon
9
Il est intéressant de noter que cela ne fonctionne pas avec juste @, ce qui est documenté comme un alias valide pour HEAD. (par exemple git push -u origin @)
void.pointer
197

Vous pouvez configurer git pour pousser vers la branche actuelle en utilisant la commande suivante

git config --global push.default current

alors fais juste

git push 

cela poussera le code vers votre branche actuelle.

Mahesh
la source
Est-il judicieux d'ajouter push = refs/heads/current:refs/for/master/currentà une section «distante» dans .git / config? Autrement dit, «courant» est-il un mot spécial ici? Ou cherchera-t-il une branche appelée "actuelle"?
David Doria
6
@DavidDoria 'current' n'est pas une branche nommée ici.
Mahesh
Il est préférable git push -u origin feature_branch_namede configurer en amont / suivi! Si vous utilisez au moins un référentiel distant.
Flo
40

Vous devriez jeter un oeil à une question similaire dans le comportement par défaut de "git push" sans une branche spécifiée

Fondamentalement, il explique comment définir le comportement par défaut pour pousser votre branche en cours d'exécution git push. Vous avez probablement besoin de:

git config --global push.default current

Autres options:

  • rien : ne poussez rien
  • correspondant : pousser toutes les branches correspondantes
  • en amont / suivi : Poussez la branche actuelle vers ce qu'elle suit
  • courant : pousser la branche courante
Najor
la source
11

J'utilise un tel alias dans ma configuration .bashrc

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

Sur la commande, $gpbil prend le nom de la branche actuelle et le pousse à l'origine.

Voici mes autres alias:

alias gst='git status'
alias gbr='git branch'
alias gca='git commit -am'
alias gco='git checkout'
theodor
la source
8

Pour ce que ça vaut, le raccourci ultime:

Dans mon .bash_profileje l'ai alias push="git push origin HEAD", donc chaque fois que je tape, pushje sais que je pousse vers la branche actuelle sur laquelle je suis.

Ryan Rebo
la source
6

Si vous utilisez git 1.7.x, vous pouvez exécuter la commande suivante pour définir la branche de suivi à distance.

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

Ensuite, vous pouvez simplement utiliser git pushpour pousser toutes les modifications. Pour une réponse plus complète, veuillez consulter la réponse acceptée à une question similaire ici.

Si vous souhaitez uniquement pousser la branche actuelle avec la commande push, vous pouvez modifier le comportement de push en amont:

git config --global push.default upstream
Faruk Sahin
la source
Merci, mais dans ce cas, TOUTES les branches de suivi ne seraient-elles pas poussées vers l'origine?
Elad
J'ai modifié la réponse, veuillez consulter le lien, la réponse y est plus complète.
Faruk Sahin
Encore une fois, le problème est que toutes les branches qui suivent les branches sont poussées de cette façon. Comme je l'ai écrit dans ma question, la branche est une branche suivie en premier lieu, donc je pense que définir la branche en amont comme vous l'avez suggéré est redondant. Ou ai-je tort?
Elad
Ensuite, vous pouvez configurer git pour pousser uniquement la branche actuelle en changeant le comportement de git push. git config --global push.default upstreamdéfinira le comportement de poussée pour pousser uniquement la branche actuelle.
Faruk Sahin
5

La façon la plus simple: exécuter git push -u origin feature/123-sandbox-testsune fois. Cela pousse la branche comme vous en avez l'habitude et définit également les informations de suivi en amont dans votre configuration locale. Après cela, vous pouvez simplement git pushpousser les branches suivies vers leurs télécommandes en amont.

Vous pouvez également le faire dans la configuration vous-même en définissant branch.<branch name>.mergele nom de la branche distante (dans votre cas, le même que le nom local) et éventuellement, branch.<branch name>.remotele nom de la télécommande vers laquelle vous souhaitez pousser (par défaut à l'origine). Si vous regardez dans votre configuration, il y en a probablement un déjà défini master, vous pouvez donc suivre cet exemple.

Enfin, assurez-vous de considérer le push.defaultparamètre. Il est par défaut "correspondant", ce qui peut avoir des résultats indésirables et inattendus. La plupart des gens que je connais trouvent "en amont" plus intuitif, ce qui ne pousse que la branche actuelle.

Des détails sur chacun de ces paramètres peuvent être trouvés dans la page de manuel git-config .

Après réflexion, en relisant votre question, je pense que vous savez tout cela. Je pense que ce que vous cherchez n'existe pas. Que diriez-vous d'une fonction bash quelque chose comme (non testé):

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}
Ryan Stewart
la source
1

Avec l'aide de la réponse de ceztko, j'ai écrit cette petite fonction d'aide pour me faciliter la vie:

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
}

Il pousse la branche actuelle à l'origine et définit également la branche de suivi à distance si elle n'a pas encore été configurée.

Bantak
la source