git push vers une branche spécifique

104

Même après avoir lu cette question: git-push-current-branch , j'ai toujours du mal à comprendre comment écrire ma commande git push. Comme mentionné dans le lien de la question, ce n'est pas clair dans la documentation.

Je voudrais utiliser mon exemple du «monde réel». Voici ce que je vois lorsque je fais une git statuscommande au niveau supérieur de ma branche:

Sur la branche amd_qlp_tester

Votre branche est en avance sur 'origin / amd_qlp_tester' de 5 commits.

etc...

Donc, mon nom de branche est, amd_qlp_testermais il a été "ramifié" de la branche principale (si j'ai les termes faux, c'est à cause de mon arrière-plan SVN). Mais alors il y a aussi le nom `origin / amd_qlp_testser '

Alors, comment exprimer ma commande push?

Est-ce l'un des éléments suivants:

git push origin/amd_qlp_tester
git push origin amd_qlp_tester
git push amd_qlp_tester
git push origin
git push
code_fodder
la source

Réponses:

93

git push origin amd_qlp_testerfonctionnera pour vous. Si vous tapez simplement git push, alors le distant de la branche actuelle est la valeur par défaut.

La syntaxe de push ressemble à ceci - git push <remote> <branch>. Si vous regardez votre télécommande dans le .git/configfichier, vous verrez une entrée [remote "origin"]qui spécifie l'url du référentiel. Ainsi, dans la première partie de la commande, vous indiquerez à Git où trouver le dépôt pour ce projet, puis vous spécifiez simplement une branche.

Petr Mensik
la source
Merci pour cela :), pouvez-vous expliquer pourquoi ce sont deux "mots" séparés lorsque la description du statut dit l'affiche comme un chemin, c'est-à-dire pourquoi origin amd_qlp_testseret nonorigin/amd_qlp_tester
code_fodder
La valeur par défaut "remote" est basée sur la configuration actuelle de la branche (dans ce cas elle le sera effectivement origin). La ou les branche (s) pour pousser les valeurs par défaut (dans les versions actuelles de git) à :if unset, ce qui signifie matching, mais c'est censé changer dans le futur.
torek
Je suis un peu confus, j'utilise la v2.10, quand je tape git pushça essaie de pousser toutes les branches suivies, contrairement à ce que tu as dit ("la télécommande de la branche courante est la valeur par défaut").
Roberto
Git 2.x devrait utiliser une simplestratégie push, ce qui signifie qu'elle ne poussera que la branche actuelle. blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies
Petr Mensik
fatal: Couldn't find remote ref branch-name-here
doug65536
115

Si votre succursale locale et votre succursale distante portent le même nom, vous pouvez simplement le faire:

git push origin branchName

Lorsque le nom de votre succursale locale et distante est différent, vous pouvez simplement le faire:

git push origin localBranchName:remoteBranchName
Imranmadbar
la source
Cela a été très utile, difficile à trouver :)
Pe Dro
Oui, vous avez raison, également difficile à retenir!
Imranmadbar
8

Les réponses en question auxquelles vous vous êtes lié concernent toutes la configuration de git afin que vous puissiez entrer des git pushcommandes très courtes et leur demander de faire ce que vous voulez. Ce qui est génial, si vous savez ce que vous voulez et comment épeler cela dans Git-Ese, mais vous êtes nouveau dans git! :-)

Dans votre cas, la réponse de Petr Mensik est la (enfin, "a") bonne. Voici pourquoi:

La commande prend racine dans votre fichier pour trouver le nom "distant" (par exemple, ). Le fichier de configuration répertorie:git push remote.git/configorigin

  • où (au niveau de l'URL) cette télécommande "vit" (par exemple, )ssh://hostname/path
  • où vont les poussées, si différentes
  • ce qui est poussé, si vous n'avez pas dit quelle (s) branche (s) pousser
  • ce qui est récupéré lorsque vous courez git fetch remote

Lorsque vous avez cloné le dépôt pour la première fois - quand c'était le cas - git a défini des valeurs par défaut pour certains d'entre eux. L'URL est celle à partir de laquelle vous avez cloné et le reste, s'il est défini ou non, sont tous des paramètres par défaut "raisonnables" ... ou, hmm, sont- ils?

Le problème avec ces derniers est que les gens ont changé d'avis, au fil du temps, quant à ce qui est «raisonnable». Alors maintenant (en fonction de votre version de git et du fait que vous ayez configuré les choses en détail), git peut afficher de nombreux avertissements sur les changements par défaut dans le futur. Ajouter le nom de la "branche à pousser" - amd_qlp_tester- (1) la ferme, et (2) pousse juste cette branche.

Si vous voulez pousser plus facilement, vous pouvez le faire avec:

git push origin

ou même:

git push

mais si cela fait ce que vous voulez, cela dépend si vous êtes d'accord avec les «premiers auteurs git» que les valeurs par défaut d'origine sont raisonnables, ou les «auteurs git ultérieurs» que les valeurs par défaut d'origine ne sont pas raisonnables. Ainsi, lorsque vous voulez faire toutes les tâches de configuration (éventuellement), voyez la question (et les réponses) auxquelles vous vous êtes lié.

En ce qui concerne le nom origin/amd_qlp_testeren premier lieu: c'est en fait une entité locale (un nom conservé dans votre dépôt), même si cela s'appelle une "branche distante". C'est la meilleure estimation de git à "où amd_qlp_testerest là-bas". Git le met à jour quand il le peut .

Torek
la source
1
Merci pour l'explication, je pense que je l'ai maintenant clair. J'aime être précis, je m'en git push origin amd_qlp_tester
tiendrai
2

Je voudrais ajouter une réponse mise à jour - maintenant j'utilise git depuis un certain temps, je trouve que j'utilise souvent les commandes suivantes pour faire n'importe quel push (en utilisant la question d'origine comme exemple):

  • git push origin amd_qlp_tester- pousser vers la branche située dans la télécommande appelée originsur la branche distante appelée amd_qlp_tester.
  • git push -u origin amd_qlp_tester- identique au dernier, mais définit la liaison en amont de la branche locale à la branche distante de sorte que la prochaine fois, vous puissiez simplement l'utiliser git push/pullsi elle n'est pas déjà liée (vous ne devez le faire qu'une seule fois).
  • git push - Une fois que vous avez configuré l'amont, vous pouvez simplement utiliser cette version plus courte.

Remarque l' -u option est la version courte de --set-upstream- ce sont les mêmes.

code_fodder
la source