199 votes

Pourquoi dois-je explicitement pousser une nouvelle branche?

Je suis nouveau en git et je pratique. J'ai créé une branche locale, mais j'ai constaté que lorsque j'ai effectué git push ma branche n'était pas téléchargée dans le référentiel. Je devais réellement faire: git push -u origin -all .
Pourquoi est-ce? Une branche n'est-elle pas un nouveau changement à pousser par défaut? Pourquoi ai-je besoin d'exécuter la deuxième commande?

265voto

VonC Points 414372

La vraie raison est que, dans un nouveau repo git (init), il n' est pas de branche (pas de master, pas de branche à tous les zéro, direction)

Ainsi, lorsque vous appuyez pour la première fois un vide en amont pensions de titres (généralement un nu un), qu'en amont pensions n'a pas de succursale du même nom.

Et:

Dans les deux cas, depuis l'amont vide pensions n'a pas de succursale:

  • il n'y a pas de correspondance branche nommée encore
  • il n'y a pas en amont de la branche à tous (avec ou sans le même nom! Suivi ou pas)

Cela signifie que votre local en premier le pousser a aucune idée:

  • où pousser
  • de quoi pousser (puisqu'il ne peut pas trouver tout à l'amont de la branche de l'être enregistré en tant que suivi à distance de la branche, et/ou ayant le même nom)

Si vous avez besoin au moins de faire un:

git push origin master

Mais si vous le faites seulement cela, vous:

  • permettra de créer en amont master branche sur l'amont (maintenant non vide repo): bon.
  • ne pas enregistrer que la branche locale 'master' doit être poussée vers l'amont (origin) 'master' (en amont de la branche): mauvais.

C'est pourquoi il est recommandé, pour la première pousser, de faire un:

git push -u origin master

Qui enregistrera origin/master comme un suivi à distance de la branche, et permettra à la prochaine pousser à pousser automatiquement master de origin/master.

git checkout master
git push

Et qui sera trop de travail avec push politiques 'current"ou"upstream'.
Dans chaque cas, après le premier git push -u origin master, un simple git push sera suffisant pour continuer de pousser maître vers la droite en amont de la branche.

42voto

Klas Mellbourn Points 6771

Sortie d' git push lorsque l'on pousse une nouvelle branche

> git checkout -b new_branch
Switched to a new branch 'new_branch'
> git push
fatal: The current branch new_branch has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin new_branch

Un simple git push suppose qu'il existe déjà une branche distante que l'actuelle branche locale est suivi. Si cette distance n'existe, et que vous voulez créer, vous devez spécifier que l'utilisation de l' -u (forme courte de l' --set-upstream) drapeau.

Pourquoi est-ce donc? Je suppose que la mise en œuvre estimé que la création d'une branche de la télécommande est de l'importance de l'action qu'il doit être difficile de le faire, par erreur. git push est quelque chose que vous faites tout le temps.

"N'est-ce pas une branche à nouveau être poussé par défaut?" Je dirais qu'un "changement" dans Git est un commit. Une branche est un pointeur vers un commit. Pour moi, il est plus logique de penser à un push comme quelque chose qui pousse engage plus pour les autres dépôts. Qui commet sont poussés est déterminé par ce direction générale, vous êtes sur et le suivi de la relation de cette branche de branches sur la télécommande.

Vous pouvez en lire plus sur le suivi de branches en Branches Distantes chapitre de la Pro Git livre.

4voto

larsmans Points 167484

Je ne pouvais pas trouver une justification par les développeurs à l'origine de cette rapidement, mais je peux vous donner une estimation basée sur quelques années de Git expérience.

Non, pas chaque branche est quelque chose que vous voulez pousser vers le monde extérieur. Il pourrait représenter une expérience privée.

Par ailleurs, où devrait - git push envoyer toutes les branches? Git peut travailler avec plusieurs télécommandes et vous pouvez avoir différents ensembles de branches sur chaque. E. g. un projet central dépôt GitHub peut avoir communiqué des branches; un GitHub fourche peut avoir sujet branches pour examen; et un local serveur Git peut avoir des branches contenant la configuration locale. Si git push pousser toutes les branches de la distance que l'actuelle direction des pistes, ce genre de système serait facile à visser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X