Je suis nouveau dans git
et je pratique. J'ai créé une branche locale mais j'ai constaté que lorsque j'ai fait git Push
ma branche n'a pas été 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?
La raison réelle est que, dans un nouveau référentiel (git init), il n'y a pas de branche (no master
, pas de branche du tout, zéro branche)
Ainsi, lorsque vous appuyez pour la première fois sur un vide rapport amont (généralement un n ), ce rapport amont n'a pas de branche du même nom.
Et:
matching
') (Poussez toutes les branches du même nom, en les créant si elles n'existent pas),simple
') (ne poussez que la branche actuelle et uniquement si elle porte un nom similaire branche de suivi à distance en amont, - depuis git 1.7.11 )Dans les deux cas, le référentiel vide en amont n'a pas de branche:
Cela signifie que votre locale est la première Push n'a aucune idée:
Donc, vous devez au moins faire un:
git Push Origin master
Mais si vous ne faites que cela, vous:
master
en amont sur le flux amont (maintenant référentiel non vide): bon.master
' doit être poussée en amont (Origin
) 'master
' (branche amont) ): mauvais.C'est pourquoi il est recommandé, pour le premier Push, de faire un:
git Push -u Origin master
Cela enregistrera Origin/master
en tant que branche de suivi à distance , et permettra à la prochaine Push de pousser automatiquement master
vers Origin/master
.
git checkout master
git Push
Et cela fonctionnera aussi avec les stratégies Push 'current
' ou 'upstream
'.
Dans chaque cas, après le git Push -u Origin master
initial, il suffira d’un simple git Push pour continuer à pousser le maître dans la branche en amont droite.
vous ne voyez pas ci-dessous
Je trouve cette "fonctionnalité" plutôt gênante puisque je n'essaie pas de lancer des roquettes sur la lune, mais de pousser ma fichue branche. Vous le faites probablement aussi, sinon vous ne seriez pas là!
Voici le correctif: si vous voulez implicitement pousser pour la branche en cours indépendamment de si cette branche existe sur l'origine, émettez cette commande une fois et vous aurez jamais à nouveau n'importe où:
git config --global Push.default current
Donc, si vous faites des branches comme ceci:
git checkout -b my-new-branch
puis faire des commits et ensuite faire un
git Push -u
pour les amener à Origin (étant sur cette branche) et cela créera ladite branche pour vous si elle n'existe pas.
Notez que le bit -u s'assure qu'ils sont liés si vous retirez plus tard de ladite branche. Si vous n'envisagez pas de tirer la branche plus tard (ou si vous le souhaitez, vous êtes d'accord avec une autre doublure) -u n'est pas nécessaire.
Sortie de git Push
lors de l'insertion d'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 suivie par la branche locale actuelle. S'il n'existe pas de branche distante de ce type et que vous souhaitez la créer, vous devez spécifier cela à l'aide de l'indicateur -u
(forme abrégée de --set-upstream
).
Pourquoi c'est comme ça? Je suppose que les responsables de la mise en œuvre ont estimé que la création d'une branche sur la télécommande est une action tellement importante qu'il devrait être difficile de le faire par erreur. git Push
est quelque chose que vous faites tout le temps.
"Une branche ne constitue-t-elle pas un nouveau changement à appliquer par défaut?" Je dirais que "un changement" dans Git est un commit. Une branche est un pointeur sur un commit. Pour moi, il est plus logique de penser à une Push comme quelque chose qui pousse vers les autres référentiels. Les commits qui sont envoyés sont déterminés par la branche sur laquelle vous vous trouvez et la relation de suivi de cette branche avec les branches de la télécommande.
Vous pouvez en savoir plus sur le suivi des branches dans le chapitre chapitre Branches distantes du livre Pro Git .
Je ne pouvais pas trouver une justification aussi rapidement par les développeurs d'origine, mais je peux vous donner une supposition éclairée basée sur quelques années d'expérience de Git.
Non, toutes les branches ne sont pas quelque chose que vous voulez pousser au monde extérieur. Cela pourrait représenter une expérience privée.
De plus, où git Push
devrait-il envoyer toutes les branches? Git peut fonctionner avec plusieurs télécommandes et vous voudrez peut-être avoir différents ensembles de branches sur chacun. Par exemple. un projet central GitHub repo peut avoir des branches de publication; un fork de GitHub peut avoir des branches de sujet à examiner; et un serveur Git local peut avoir des branches contenant une configuration locale. Si git Push
poussait toutes les branches sur la télécommande suivie par la branche actuelle, ce type de schéma serait facile à bousiller.
HEAD est l'abréviation de branch branch, donc git Push -u Origin HEAD fonctionne. Maintenant, pour éviter cette saisie à chaque fois que j'utilise un alias:
git config --global alias.pp 'Push -u Origin HEAD'
Après cela, chaque fois que je veux pousser une branche créée via git -b, je peux la pousser en utilisant:
git pp
J'espère que cela fait gagner du temps à quelqu'un!
Au premier contrôle
Étape 1: git remote -v
// si trouvé git initialise puis supprime ou saute l'étape 2
Étape 2: git remote rm Origin
// Configurez ensuite votre adresse email globalement git
Étape 3: git config --global user.email "[email protected]"
Étape 4: git initial
Étape 5: git commit -m "Initial Project"
// Si vous avez déjà ajouté un dépôt de projet, passez à l'étape 6.
Étape 6: git remote add Origin %repo link from bitbucket.org%
Étape 7: git Push -u Origin master