Je suis nouveau git
et je pratique. J'ai créé une branche locale mais j'ai vu que lorsque je l'ai fait, git push
ma branche n'était pas téléchargée dans le référentiel. Je devais faire en fait: git push -u origin --all
.
Pourquoi est-ce? Une branche n'est-elle pas un nouveau changement à pousser par défaut? Pourquoi dois-je exécuter la deuxième commande?
git
version-control
Cratyle
la source
la source
push.default
, voirman git-config
). Si vous le faitesgit config --add push.default current
, alorsgit push
créera automatiquement la branche dans le dépôt distant si nécessaire. Pourquoi ce n'est pas la valeur par défaut est expliqué dans les réponses.current
» et «upstream
», consultez mon ancienne réponse stackoverflow.com/a/13751847/6309 .Réponses:
La vraie raison est que, dans un nouveau dépôt (git init), il n'y a pas de branche (non
master
, pas de branche du tout, zéro branche)Donc, quand vous poussez pour la première fois vers un dépôt en amont vide (généralement un dépôt nu ), ce dépôt en amont n'a pas de branche du même nom.
Et:
matching
' (pousser toutes les branches du même nom, les créer si elles n'existent pas),simple
' (pousser uniquement la branche actuelle, et seulement si elle a un nom similaire branche de suivi à distance du en amont, depuis git 1.7.11 )Dans les deux cas, puisque le dépôt vide en amont n'a pas de branche:
Cela signifie que votre première poussée locale n'a aucune idée:
Vous devez donc au moins faire un:
Mais si vous ne faites que cela, vous:
master
branche amont sur l'amont (désormais repo non vide): bien.master
» doit être poussée vers upstream (origin
)master
»(branche amont): mauvais.C'est pourquoi il est recommandé, pour la première poussée, de faire un:
Cela enregistrera
origin/master
une branche de suivi à distance , et permettra la prochaine poussée de pousser automatiquementmaster
àorigin/master
.Et cela fonctionnera aussi avec les politiques push '
current
' ou 'upstream
'.Dans chaque cas, après l'initiale
git push -u origin master
, un simple push git suffira pour continuer à pousser master vers la branche amont droite.la source
git push
s'attend également à ce que la branche existe déjà?simple
': pousser vers n'importe quelle branche amont enregistrée, si cette branche amont a le même nom que la branche locale. Un simplegit push
suffira.git push --set-upstream origin new_branch
ougit push -u origin new_branch
pour faire court. Le-all
que le questionneur a utilisé a contourné le nom d'une nouvelle branche spécifique en incluant toutes les branches. Ceci est couvert par + Klas Mellbourn dans sa réponse.Vous ne voyez pas ci-dessous
Je trouve cette `` fonctionnalité '' plutôt ennuyeuse car je n'essaye pas de lancer des fusées sur la lune, il suffit de pousser ma foutue branche. Vous le faites probablement aussi sinon vous ne seriez pas là!
Voici le correctif: si vous voulez qu'il pousse implicitement pour la branche actuelle indépendamment du fait que cette branche existe à l'origine, émettez simplement cette commande une fois et vous n'aurez plus jamais à recommencer nulle part:
Donc, si vous créez des branches comme celle-ci:
puis faites quelques commits et ensuite faites un
pour les sortir à l'origine (étant sur cette branche) et il 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 deviez tirer plus tard de ladite branche. Si vous n'avez pas l'intention de retirer la branche plus tard (ou si vous êtes d'accord avec une autre doublure si vous le faites) -u n'est pas nécessaire.
la source
git push -u
Sortie de
git push
lors de la poussée d'une nouvelle brancheUn simple
git push
suppose qu'il existe déjà une branche distante que la branche locale actuelle suit. Si aucune branche distante de ce type n'existe et que vous souhaitez la créer, vous devez la spécifier à l'aide de l' indicateur-u
(forme courte de--set-upstream
).Pourquoi est-ce ainsi? Je suppose que les développeurs ont estimé que la création d'une branche sur la télécommande est une action si importante qu'il devrait être difficile de le faire par erreur.
git push
est quelque chose que vous faites tout le temps."Une branche n'est-elle pas un nouveau changement à pousser par défaut?" Je dirais que "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 les commissions vers les autres référentiels. Les validations sont déterminées 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 Branches distantes du livre Pro Git .
la source
fatal
mais j'avais déjà fait un commit dans la branche.git push -u origin
copié dans le référentiel distant.fatal
msg comme celui que vous mentionnez dans la réponse. Cette différence dépend-elle du fait que j'ai commis quelque chose dans la branche?fatal
message. Je suppose que la différence dépend exactement de l'implémentation git que vous utilisez. Ma sortie est de 1.8.1.msysgit.1 fonctionnant sous Windows 8.Je n'ai pas pu trouver une justification aussi rapide par les développeurs d'origine, mais je peux vous donner une estimation éclairée basée sur quelques années d'expérience Git.
Non, toutes les branches ne sont pas quelque chose que vous voulez pousser vers le monde extérieur. Cela pourrait représenter une expérience privée.
De plus, où doivent
git push
envoyer toutes les succursales? Git peut fonctionner avec plusieurs télécommandes et vous voudrez peut-être avoir différents ensembles de branches sur chacune. Par exemple, un dépôt GitHub de projet central peut avoir des branches de publication; un fork de GitHub peut avoir des branches de rubrique à revoir; et un serveur Git local peut avoir des branches contenant une configuration locale. Si l'git push
on poussait toutes les branches vers la télécommande que la branche actuelle suit, ce genre de schéma serait facile à bousiller.la source
It might represent a private experiment
.Ok mais quel est le problème? La branche «principale» sur laquelle tout le monde travaille c'estmaster
-à- dire n'est pas affectée. Sauf si vous voulez garder le code source caché 2)git push, without a remote, pushes to the current branch's remote
Je vous ai perdu ici :(git fetch
chaque fois centaines d'agences à moitié actives. 2) Je fais référence augit push
comportement par défaut de. Il pousse vers la télécommande que la branche actuelle suit, le cas échéant.HEAD est l'abréviation de la branche actuelle donc git push -u origin HEAD fonctionne. Maintenant, pour éviter ce type de 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 la branche créée via la branche git -b, je peux la pousser en utilisant:
git pp
J'espère que cela fera gagner du temps à quelqu'un!
la source
Au premier contrôle
Étape 1:
git remote -v
// si trouvé git initialize puis supprimez ou sautez l'étape 2
Étape 2:
git remote rm origin
// Ensuite, configurez votre adresse e-mail globalement git
Étape 3:
git config --global user.email "[email protected]"
Étape 4:
git initial
Étape 5:
git commit -m "Initial Project"
// Si vous ajoutez déjà 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
la source
Je viens de vivre une nouvelle permutation de ce problème.
J'ai eu une branche nommée
feat/XYZ-1234-some-description
parce que je travaillais sur Jira numéro 1234. Pendant le travail, j'ai créé un nouveau numéro Jira pour suivre un travail plus petit, et quand je suis venu pousser, j'ai décidé de pousser vers un nom de branche avec ce nouveau numéro de problème dans:Cela m'a donné l'erreur discutée dans ce fil SO. Mais comme j'essayais de pousser vers un nom de branche différent de ma branche actuelle, mon problème était différent de celui décrit ici. J'ai fini par renommer ma branche locale avant de pouvoir la pousser:
Après un peu plus de lecture, j'ai réalisé que j'aurais pu définir un
src
sur legit push
, soit sur le nom de la branche actuelle, soit justeHEAD
si cela était approprié:la source
Si vous activez la première application de nouvelles modifications depuis votre nouvelle succursale. Et obtenir ci-dessous l'erreur:
Pour pousser la branche actuelle et définir la télécommande en amont, utilisez
la source