Git: quelle est la télécommande configurée par défaut pour la branche?

192

J'ai un référentiel nu à distance hub. Je travaille uniquement dans la masterbranche. La dernière phrase de ce message d'erreur ci-dessous me fait me demander: comment savoir quelle est la "télécommande configurée par défaut pour votre branche actuelle" ? Et comment le définir?

[myserver]~/progs $ git remote -v
hub     ~/sitehub/progs.git/ (fetch)
hub     ~/sitehub/progs.git/ (push)

[myserver]~/progs $ git branch -r
  hub/master

[myserver]~/progs $ cat .git/HEAD
ref: refs/heads/master

[myserver]~/progs $ git pull hub
You asked to pull from the remote 'hub', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
leonbloy
la source

Réponses:

230

Suivre la branche distante

Vous pouvez spécifier le référentiel distant par défaut pour pousser et tirer en utilisant l'option de suivi de git-branch. Vous feriez normalement cela en spécifiant l'option --track lors de la création de votre branche principale locale, mais comme elle existe déjà, nous allons simplement mettre à jour la configuration manuellement comme ceci:

Modifiez votre .git/config

[branch "master"]
  remote = origin
  merge = refs/heads/master

Maintenant, vous pouvez simplement git push et git pull.

[ source ]

scragz
la source
Cela ne serait-il pas également réglé si le PO le faisait git pull hub master?
Ryan Bigg
@Ryan Bigg: Pas automatiquement, ou tu bousillerais toujours ta configuration.
piquer le
36
Pourquoi éditer un fichier de configuration lorsque des commandes git existent pour cette même raison?
urschrei
43
git branch --set-upstream local_branch remote / remote_branch (ou en poussant, comme détaillé ci-dessous)
urschrei
25
@scragz: Pas question! l'approche de commande garantit que votre .gitconfig est laissé dans un état significatif.
smci
260

Vous pouvez le faire plus simplement, en garantissant que votre .gitconfig est laissé dans un état significatif:

Utilisation de Git version v1.8.0 et supérieure

git push -u hub master en poussant, ou:
git branch -u hub/master

OU

(Cela va régler la télécommande pour la branche check-out actuellement à hub/master)
git branch --set-upstream-to hub/master

OU

(Cela va régler la télécommande pour la branche nommée branch_nameà hub/master)
git branch branch_name --set-upstream-to hub/master

Si vous utilisez v1.7.xou plus tôt

vous devez utiliser --set-upstream:
git branch --set-upstream master hub/master

urschrei
la source
3
Pour ceux qui se demandent: la deuxième commande peut être utilisée pour les branches existantes
Eric Hu
1
@ eric-hu comme détaillé dans ma réponse ici: stackoverflow.com/questions/4878249/…
urschrei
1
La set-upstream[-to]commande modifie la télécommande actuellement configurée. L'affiche originale a posé des questions sur la télécommande configurée par défaut . Ce n'est sûrement pas tout à fait le même concept?
Steve Pitchers
1
Chaque branche a une télécommande actuellement configurée, spécifiant quelle branche sur cette télécommande correspond à la branche locale. La télécommande configurée par défaut détermine quelle branche est poussée ou tirée si vous n'en spécifiez pas explicitement. Cette réponse définit uniquement l' actuelle . La réponse acceptée (modification à la main) vous permet également de définir la réponse par défaut . Quelqu'un connaît-il une commande qui évite d'avoir à éditer à la main?
Steve
1
--set-upstream-tofait exactement les mêmes changements .git/configque @scragz a suggéré dans sa réponse .
strah
-1

la commande pour obtenir la télécommande push efficace pour la branche, par exemple, maître, est:

git config branchement.master.pushRemote || git config remote.pushDefault || git config branchement.master.remote

Voici pourquoi (à partir de la sortie "man git config"):

branch.name.remote [...] indique à git fetch et git push de quelle télécommande chercher / push vers [...] [pour push] peut être remplacé par remote.pushDefault (pour toutes les branches) [et] pour le branche actuelle [..] outre surchargée par branch.name.pushRemote [...]

Pour une raison quelconque, "man git push" ne parle que de branch.name.remote (même s'il a la moindre priorité des trois) + déclare à tort que s'il n'est pas défini, poussez les valeurs par défaut à l'origine - ce n'est pas le cas, c'est juste que lorsque vous clonez un dépôt, branch.name.remote est défini sur origin, mais si vous supprimez ce paramètre, git push échouera, même si vous avez toujours la télécommande d'origine

darkdiatel
la source
Cette question a déjà reçu une réponse plus utile.
Austin Schäfer