Je suis apparemment horrible à utiliser git, malgré mes meilleures tentatives pour le comprendre.
De kernel.org pour git push
:
-u
- en amont
Pour chaque branche qui est à jour ou poussée avec succès, ajoutez une référence en amont (suivi), utilisée par git-pull (1) sans argument et d'autres commandes. Pour plus d'informations, voir
branch.<name>.merge
dans git-config (1).
Voici branch.<name>.merge
de git config
:
branch.<name>.merge
Définit, conjointement avec
branch.<name>.remote
, la branche amont pour la branche donnée. Il indique à git fetch / git pull quelle branche fusionner et peut également affecter git push (voir push.default). Lorsqu'il est en branche<name>
, il indique à git fetch la spécification par défaut à marquer pour la fusion dans FETCH_HEAD. La valeur est gérée comme la partie distante d'une spécification de référence et doit correspondre à une référence extraite de la distance donnée par"branch.<name>.remote"
. Les informations de fusion sont utilisées par git pull (qui appelle d'abord git fetch) pour rechercher la branche par défaut pour la fusion. Sans cette option, git pull utilise par défaut la fusion de la première refspec récupérée. Spécifiez plusieurs valeurs pour obtenir une fusion de poulpe. Si vous souhaitez configurer git pull pour qu'il fusionne<name>
avec une autre branche du référentiel local, vous pouvez pointerbranch.<name>.merge
jusqu'à la branche souhaitée et utilisez le réglage spécial. (une période) pourbranch.<name>.remote
.
J'ai réussi à configurer un référentiel distant avec github, et j'ai réussi à pousser mon premier commit avec:
git push -u origin master
Ensuite, j'ai involontairement réussi à pousser mon deuxième commit vers mon référentiel distant en utilisant:
git commit -m '[...]'
Cependant, pensant à tort que je devrais repousser vers origin
de master
, j'ai couru:
# note: no -u
git push origin master
Qu'est-ce que cela a fait? Cela ne semblait avoir aucun effet. Ai-je "défait" git push -u origin master
?
I'm apparently terrible at using git, despite my best attempts to understand it.
- Je n'ai jamais vu quelqu'un me recréer aussi bien.Réponses:
La clé est "git-pull sans argument". Lorsque vous effectuez une opération
git pull
depuis une branche, sans spécifier de source distante ou de branche, git examine lebranch.<name>.merge
paramètre pour savoir d'où extraire.git push -u
définit ces informations pour la branche que vous appuyez.Pour voir la différence, utilisons une nouvelle branche vide:
Tout d'abord, nous poussons sans
-u
:Maintenant, si nous ajoutons
-u
:Notez que les informations de suivi ont été configurées pour que cela
git pull
fonctionne comme prévu sans spécifier la télécommande ou la branche.Mise à jour: conseils bonus:
git pull
ce paramètre affecte également le comportement par défaut degit push
. Si vous avez l'habitude d'utiliser-u
pour capturer la branche distante que vous souhaitez suivre, je recommande de définir votrepush.default
valeur de configuration surupstream
.git push -u <remote> HEAD
poussera la branche actuelle vers une branche du même nom<remote>
(et configurera également le suivi pour que vous puissiez le fairegit push
ensuite).la source
git push <remote> <branch>
rend les choses sans ambiguïté . Si vous laissez le git distant ou de branche se replie sur les paramètres de configuration de branche, qui sont définis pour vous avecgit push -u
.git push origin test
(ce qui n'est pas le cas-u
). Vous avez ensuite montré que celagit push -u origin test
supprimait l'ambiguïté. Y a-t-il une faute de frappe, ou suis-je simplement redevenu dense?git push <remote> <branch>
est sans ambiguïté, je veux dire celui par rapportgit push
auquel s'appuie sur la config de branche. De même,git pull <remote> <branch>
est sans ambiguïté etgit pull
repose sur la configuration de branche. Une fois que vous avez poussé avec-u
, à la foisgit push
etgit pull
fonctionnera comme prévu.git push
- à moins que vous ne vous définissiezpush.default
vous-même,git push
utilise uniquement la configuration de branche en amont pour décider vers quelle télécommande pousser, pas la branche distante à mettre à jour.git push origin master
et la même chose pour l'autre côté IE.git pull origin master
.. Donc, si vous supposez un changement de branche, vous pouvezgit push origin branch_name
le faire de même pour l'autre côté IE.git pull origin branch_name
… est le même que:
Faites la dernière déclaration, si vous oubliez le
-u
!Ou vous pouvez le forcer:
Si vous laissez la commande le faire pour vous, elle choisira vos erreurs comme si vous avez tapé une branche inexistante ou non
git remote add
; mais c'est peut-être ce que vous voulez. :)la source
master
n'est qu'un exemple :)git branch master -u origin/master
details @ stackoverflow.com/a/2286030/790359-u
option, tapezgit push -u
immédiatement sera OK.--setup-upstream
sera obsolète:The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
git branch --set-upstream-to=origin/master master
En termes plus simples:
Techniquement, le
-u
indicateur ajoute une référence de suivi au serveur en amont vers lequel vous poussez.Ce qui est important ici, c'est que cela vous permet de faire un
git pull
sans fournir plus d'arguments. Par exemple, une fois que vous avez fait ungit push -u origin master
, vous pouvez appeler plus tardgit pull
et git saura que vous vouliez diregit pull origin master
.Sinon, vous devrez taper toute la commande.
la source
-u
drapeau àorgin master
chaque pull suivant, j'y ferai référence. Et si je veux changer legit pull
comportement que je devrais exécutergit push -u origin some_other_branch
etgit pull
maintenant je vais me référersome_other_branch
? Je vous remercie!git push -u origin master
Toutes les commandes git bash nécessaires pour pousser et tirer dans Github:
Si vous souhaitez modifier un fichier, alors:
Pour voir toutes les branches et leurs validations:
la source