Que signifie git push -u?

323

J'ai deux versions différentes de git. Dans la version 1.6.2, git pushn'a pas l' -uoption. Il n'apparaît que dans la version 1.7.x.

D'après les documents, le -uest lié à la variable

branch.<name>.merge

dans git config. Cette variable est décrite ci-dessous:

Defines, together with branch.<name>.remote, the upstream branch 
for the given branch. It tells git fetch/git pull which branch to merge.

Qu'est-ce qu'une succursale en amont?

Frankie Ribery
la source

Réponses:

362

"En amont" se réfère au référentiel principal à partir duquel d'autres personnes vont tirer, par exemple votre référentiel GitHub. L'option -u définit automatiquement cela en amont pour vous, reliant votre référentiel à un référentiel central. De cette façon, à l'avenir, Git "sait" où vous voulez pousser et d'où vous voulez tirer, afin que vous puissiez utiliser git pullou git pushsans arguments. Un peu plus bas, cet article explique et démontre ce concept.

Rafe Kettler
la source
19
Je vois que l'article auquel vous avez lié le fait le souligner, mais comme il s'agit d'un problème, je pense qu'il vaut la peine de souligner que la branche qui est poussée vers git push n'est pas affectée par la configuration de la branche en amont, sauf si vous avez push.defaultdéfini à tracking(ou upstreamdans les versions ultérieures de git).
Mark Longair
je ne comprends pas pourquoi eclipse egit offre les deux alors?
HaveAGuess
23
@HaveAGuess Probablement pour la même raison qu'Eclipse offre également à la fois la misère et le désespoir.
twiz
9

Ce n'est plus à jour!

Push.default is unset; its implicit value has changed in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the traditional behavior, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

When push.default is set to 'matching', git will push local branches
to the remote branches that already exist with the same name.

Since Git 2.0, Git defaults to the more conservative 'simple'
behavior, which only pushes the current branch to the corresponding
remote branch that 'git pull' uses to update the current branch.
Peter Piper
la source
1
Mais que signifie le drapeau -umaintenant? Il est toujours recommandé par GitHub d'utiliser ce drapeau lorsque nous créons un nouveau dépôt ...
Jean Paul
8
@JeanPaul - L'option -u fait ce qui suit: 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 sans argument et d'autres commandes. Ainsi, après avoir poussé votre branche locale avec l'option -u, cette branche locale sera automatiquement liée à la branche distante, et vous pouvez utiliser git pull sans aucun argument.
Peter Piper