web-dev-qa-db-fra.com

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 Push modifie également mes autres branches ou met-il uniquement à jour ma branche actuelle? J'ai trois branches: master, production et sandbox.

La documentation de git Push n'est pas très claire à ce sujet, j'aimerais donc clarifier cela pour de bon.

Quelles branches et télécommandes les commandes git Push suivantes sont-elles mises à jour exactement?

git Push 
git Push Origin

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

Je comprends que git Push [remote] [branch] poussera uniquement cette branche vers la télécommande.

1312
PlagueHammer

Vous pouvez contrôler le comportement par défaut en définissant Push.default dans votre configuration git. De la documentation de git-config (1) :

Push.default

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

  • nothing: ne rien pousser

  • matching: Poussez toutes les branches correspondantes

    Toutes les branches ayant le même nom aux deux extrémités sont considérées comme correspondantes.

    C'était la valeur par défaut, mais pas depuis Git 2.0 (simple est la nouvelle valeur par défaut).

  • upstream: place la branche actuelle dans sa branche amont (tracking est un synonyme déconseillé pour upstream)

  • current: Pousser la branche actuelle vers une branche du même nom

  • simple: (nouveauté de 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 elle convient bien aux débutants.

    Ce mode est devenu le mode par défaut dans Git 2.0.

Les modes simple, actuel et en amont sont destinés à ceux qui veulent sortir une seule branche après le travail, même lorsque les autres branches ne sont pas encore prêtes à sortir.

Exemples de ligne de commande:

Pour afficher la configuration actuelle:

git config --global Push.default

Pour définir une nouvelle configuration:

git config --global Push.default current
1537
Brian L

Vous pouvez configurer le comportement par défaut de votre git avec Push.default

git config Push.default current

ou si vous avez plusieurs référentiels et que vous voulez la même chose pour tous,

git config --global Push.default current

Le actuel dans cette configuration signifie que par défaut vous aurez niquement la branche actuelle quand vous le ferez git Push

Les autres options sont:

  • rien: ne poussez rien
  • matching: affiche toutes les branches correspondantes (par défaut)
  • tracking: Poussez la branche actuelle vers ce qu'elle suit
  • current: Pousse la branche actuelle

MISE À JOUR - NOUVELLE FAÇON DE FAIRE CELA

A partir de Git 1.7.11, procédez comme suit:

git config --global Push.default simple

Ceci est un nouveau paramètre introduit qui fonctionne de la même manière que courant et sera rendu par défaut à git à partir de la version 2.0 selon les rumeurs.

200
Christoffer

git Push Origin va appliquer toutes les modifications aux branches locales qui ont des branches distantes correspondantes en Origin Comme pour git Push

Fonctionne comme git Push <remote>, où <remote> représente la télécommande de la branche actuelle (ou Origine, si aucune télécommande n'est configurée pour la branche actuelle).

À partir de la section Exemples de la git-Push page de manuel

198
baudtack

Je viens de confier mon code à une branche et de le pousser vers 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
54
neoneye

Voici une information très pratique et utile sur Git Push : Git Push: le bon conseil

L’utilisation la plus courante de git Push consiste à transmettre vos modifications locales à votre référentiel public en amont. En supposant que l'amont soit un nom distant nommé "Origin" (le nom distant par défaut si votre référentiel est un clone) et que la branche à mettre à jour en/à l'origine s'appelle "maître" (nom de la branche par défaut), cela se fait avec: git Push Origin master

git Push Origin transmettra les modifications de toutes les branches locales aux branches correspondantes de la télécommande d'origine.

git Push Origin master transmettra les modifications de la branche maître locale à la branche maître distante.

git Push Origin master:staging transmettra les modifications de la branche maître locale à la branche de stockage intermédiaire à distance, si elles existent.

24
Mukesh Chapagain

(Mars 2012)
Attention: cette stratégie par défaut "matching" pourrait bientôt changer
(parfois après git 1.7.10 +)
:

Voir " Veuillez discuter: que" git Push "devrait faire quand vous ne dites pas quoi pousser? "

Dans le réglage actuel (c'est-à-dire Push.default=matching), _git Push_ sans argument va pousser toutes les branches qui existent localement et à distance avec le même nom .
Ceci est généralement approprié lorsqu'un développeur installe son propre référentiel public, mais peut être source de confusion, voire de danger, lors de l'utilisation d'un référentiel partagé.

La proposition consiste à changer la valeur par défaut en 'upstream' , c’est-à-dire ne pousser que la branche courante et la pousser vers la branche. tirer de.
Un autre candidat est 'current'; cela pousse uniquement la branche actuelle vers 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 pertinentes précédentes incluent:

Pour rejoindre la discussion, envoyez vos messages à: [email protected]

19
VonC

Je viens de mettre cela dans ma section alias .gitconfig et j'adore son fonctionnement:

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

Poussera la branche actuelle vers Origin avec git pub ou un autre dépôt avec git pub repo-name. Savoureux.

18
Mat Schaffer

Vous pouvez pousser la branche actuelle avec la commande

git Push Origin HEAD

(pris de ici )

9
Andriy F.

Un git Push va essayer de pousser toutes les branches locales sur le serveur distant, c'est probablement ce que vous ne voulez pas. J'ai quelques réglages à effectuer pour régler ce problème:

Les alias "gpull" et "gpush" sont les suivants:

Dans mon ~/.bash_profile

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

Ainsi, l’exécution de "gpush" ou "gpull" ne fera que pousser ma branche "actuellement".

8
Cody Caughlan

Vous pouvez modifier ce comportement par défaut dans votre .gitconfig , par exemple:

_[Push]
  default = current
_

Pour vérifier les paramètres actuels, exécutez:

_git config --global --get Push.default
_
7
kenorb

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

Ce script (appelé git-setpush) définira la valeur de configuration de remote.Origin.Push sur quelque chose qui ne fera que pousser la branche actuelle:

#!/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

notez que, comme nous utilisons Gerrit , la cible est définie sur refs/for/XXX sur Push dans une branche de révision. Il suppose également que l'origine est votre nom de télécommande.

Invoquez-le après avoir vérifié une branche avec

git checkout your-branch
git setpush

Il pourrait évidemment être adapté pour effectuer également le paiement, mais j'aime bien les scripts faire une chose et bien le faire

3
Mark Fisher

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

function gpush()
{
  if [[ "x$1" == "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$1" == "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
MichaelMoser