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?
Réponses
Trop de publicités?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:
- le défaut de pousser la politique était"
matching
' (pousser toutes les branches du même nom, de les créer s'ils n'existent pas), - la valeur par défaut de pousser la politique est maintenant '
simple
' (push seulement la branche courante, et seulement si elle a un même nom suivi à distance de la branche en amont, depuis git 1.7.11)
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.
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.
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.