Comportement par défaut de "git push" sans branche spécifiée

j'utilise la commande suivante pour pousser vers ma branche distante:

git push origin sandbox

si je dis

git push origin

est-ce que cela pousse les changements dans mes autres branches aussi, ou est-ce que cela ne fait que mettre à jour ma branche actuelle? J'ai trois branches: master , production et sandbox .

la documentation git push n'est pas très claire à ce sujet, donc j'aimerais clarifier ceci pour de bon.

qui les branches et les télécommandes font-elles exactement la mise à jour des commandes git push suivantes?

git push 
git push origin

origin ci-dessus est une télécommande.

je comprends que git push [remote] [branch] poussera seulement cette branche vers la télécommande.

1229
demandé sur Nick Volynkin 2009-06-04 06:45:57

12 réponses

vous pouvez contrôler le comportement par défaut en paramétrant push.par défaut dans votre git config. De git-config(1) de la documentation :

push.default

définit l'action que doit prendre git push si aucun refspec n'est donné sur la ligne de commande, aucun refspec n'est configuré dans la télécommande, et aucun refspec n'est impliqué par aucune des options données sur la ligne de commande. Les valeurs possibles sont:

  • nothing : do pas pousser quoi que ce soit

  • matching : poussez tous les branches

    toutes les succursales portant le même nom aux deux extrémités sont considérées comme correspondant.

    C'est la valeur par défaut de Git 1.x.

  • upstream : pousser la branche courante vers sa branche amont ( tracking est un synonyme déprécié pour amont)

  • current : pousser la branche courante à une branche du même nom

  • simple : (nouveau en Git 1.7.11) comme en amont, mais refuse de pousser si le nom de la branche en amont est différent de celui de la branche locale

    c'est l'option la plus sûre et convient bien aux débutants.

    cela deviendra la valeur par défaut dans Git 2.0.

Les modes simple, courant et amont sont pour ceux qui veulent pousser une seule branche après avoir terminé le travail, même si les autres branches ne sont pas encore prêtes à être repoussées

exemples en ligne de commande:

pour voir la configuration actuelle:

git config --global push.default

pour définir une nouvelle configuration:

git config --global push.default current
1451
répondu UncleZeiv 2016-08-03 19:16:48

git push origin va pousser tous les changements sur les branches locales qui ont des branches distantes correspondantes à origin comme pour git push

fonctionne comme git push <remote> , où <remote> est la télécommande de la branche courante (ou l'origine, si aucune télécommande n'est configurée pour la branche courante).

à Partir des Exemples de la section git-push l'homme page

198
répondu baudtack 2010-02-10 00:56:35

Vous pouvez configurer le comportement par défaut pour votre git push.par défaut

git config push.default current

ou si vous avez beaucoup de dépôts et veux le même pour tous, alors

git config --global push.default current

le courant dans cette configuration signifie que par défaut vous allez seulement pousser la branche courante quand vous faites git push

les autres options sont:

  • rien: ne poussez rien
  • matching : Pousser tous les branches (par défaut)
  • suivi de : Pousser la branche courante pour ce qu'il est suivi de
  • courant: pousser la branche courante

MISE À JOUR - NOUVELLE FAÇON DE FAIRE DE CETTE

en date du 1.7.11 git faire ce qui suit:

git config --global push.default simple

c'est un nouveau réglage introduit qui fonctionne de la même manière que current, et sera rendu par défaut à git à partir de v 2.0 selon les rumeurs

195
répondu Christoffer 2013-03-12 23:06:25

j'ai juste donné mon code à une branche et je l'ai poussé à github, comme ceci:

git branch SimonLowMemoryExperiments
git checkout SimonLowMemoryExperiments
git add .
git commit -a -m "Lots of experimentation with identifying the memory problems"
git push origin SimonLowMemoryExperiments
55
répondu neoneye 2011-11-06 10:05:54

Voici une information très pratique et utile sur git Push : Git Push: Juste la Pointe

l'utilisation la plus courante de git push est de pousser vos modifications locales vers votre dépôt public en amont. En supposant que l'amont est un distant nommé "origin" (le nom par défaut si votre dépôt est un clone) et que la branche à mettre à jour est nommée" master " (le nom par défaut de la branche), cela se fait avec: git push origin master

git push origin va pousser les changements de toutes les branches locales vers les branches correspondantes à distance d'origine.

git push origin master va pousser les changements de la branche principale locale à la branche principale distante.

git push origin master:staging va pousser les changements de la branche principale locale à la branche de staging distante si elle existe.

22
répondu Mukesh Chapagain 2015-12-10 14:26:07

(mars 2012)

attention: que la valeur par défaut " matching "politique pourrait changer bientôt

(parfois après git1.7.10+)
:

Voir " s'il vous Plaît discuter: ce "git push" à faire quand vous ne dites pas ce que pour pousser? "

Dans le contexte actuel (c'est à dire push.default=matching ), git push sans argument poussera toutes les branches qui existent localement et à distance avec le même nom .

Cela est généralement approprié lorsqu'un développeur pousse vers son propre dépôt public, mais peut être déroutant, voire dangereux, lorsqu'il utilise un dépôt partagé.

la proposition est de changer la valeur par défaut à upstream , c'est-à-dire pousser seulement la branche courante, et la pousser à la branche git tirer serait tirer de.

Un autre candidat est ' current "; cela pousse seulement la branche courante à la branche distante du même nom.

Ce qui a été discuté jusqu'à présent peut être vu dans ce fil:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

les discussions antérieures pertinentes comprennent:

pour participer à la discussion, envoyez vos messages à: git@vger.kernel.org

19
répondu VonC 2012-03-17 11:13:18

je viens de mettre ça dans le mien .gitconfig section alias et de l'amour comment cela fonctionne:

pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"

poussera la branche courante à l'origine avec git pub ou une autre pension avec git pub repo-name . Savoureux.

17
répondu Mat Schaffer 2011-01-23 18:36:59

un git push va essayer de pousser toutes les branches locales vers le serveur distant, c'est probablement ce que vous ne voulez pas. J'ai un couple de commodités setup pour faire face à cela:

Alias "gpull" et "gpush de façon appropriée":

Dans mon ~/.bash_profile

get_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)//'`
}
alias gpull='git pull origin `get_git_branch`'
alias gpush='git push origin `get_git_branch`'

ainsi, l'exécution de" gpush "ou" gpull "poussera juste ma branche" actuellement en service".

8
répondu Cody Caughlan 2009-06-04 02:49:08

vous pouvez pousser la branche courante avec la commande

git push origin HEAD

(tiré de ici )

7
répondu Andriy F. 2017-05-23 11:55:03

vous pouvez changer ce comportement par défaut dans votre .gitconfig , par exemple:

[push]
  default = current

pour vérifier les paramètres actuels, Lancez:

git config --global --get push.default
7
répondu kenorb 2015-11-20 11:57:54

plutôt que d'utiliser des alias, je préfère créer des scripts git-XXX pour pouvoir les contrôler plus facilement (nos développeurs ont tous un dir contrôlé par source sur leur chemin pour ce type de chose).

ce script (appelé git-setpush ) définira la valeur de configuration pour remote.origin.push à quelque chose qui poussera seulement la branche courante:

#!/bin/bash -eu

CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2)
NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH

echo "setting remote.origin.push to $NEW_PUSH_REF"
git config remote.origin.push $NEW_PUSH_REF

note, Comme nous utilisons Gerrit , il fixe l'objectif à refs/for/XXX de pousser dans une direction générale de l'examen. Il suppose également l'origine est votre nom distant.

L'invoquer après avoir vérifié une succursale avec

git checkout your-branch
git setpush

il pourrait évidemment être adapté pour faire aussi la caisse, mais j'aime les scripts à faire une chose et le faire bien

3
répondu Mark Fisher 2012-04-19 15:55:22

j'ai ajouté les fonctions suivantes dans mon .bashrc fichier pour automatiser ces tâches. Il fait git push / git pull + nom de la branche courante.

function gpush()
{
  if [[ "x" == "x-h" ]]; then
    cat <<EOF
Usage: gpush
git: for current branch: push changes to remote branch;
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git push ${bname}
    set +x
  fi
}

function gpull()
{
  if [[ "x" == "x-h" ]]; then
    cat <<EOF
Usage: gpull
git: for current branch: pull changes from
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git pull ${bname}
    set +x
  fi
}
2
répondu MichaelMoser 2015-11-04 10:51:15