Was bedeutet Git Push -u?

323

Ich habe zwei verschiedene Versionen von Git. In der Version 1.6.2 git pushgibt es keine -uOption. Es erscheint nur in der Version 1.7.x.

In den Dokumenten -ubezieht sich das auf die Variable

branch.<name>.merge

in git config. Diese Variable wird unten beschrieben:

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

Was ist eine vorgelagerte Niederlassung?

Frankie Ribéry
quelle

Antworten:

360

"Upstream" bezieht sich auf das Haupt-Repo, aus dem andere Personen ziehen, z. B. Ihr GitHub-Repo. Die Option -u legt diesen Upstream automatisch für Sie fest und verknüpft Ihr Repo mit einem zentralen. Auf diese Weise "weiß" Git in Zukunft, wohin Sie pushen und wohin Sie ziehen möchten, sodass Sie Argumente verwenden git pulloder verwenden git pushkönnen. Ein wenig weiter unten erklärt und demonstriert dieser Artikel dieses Konzept.

Rafe Kettler
quelle
19
Ich sehe, dass der Artikel, auf den Sie verlinkt haben, darauf hinweist, aber da es sich um eine Art Gotcha handelt, ist es meiner Meinung nach erwähnenswert, dass der Zweig, auf den mit git push verschoben wird, von der Konfiguration des Upstream-Zweigs nicht betroffen ist, es sei denn, Sie haben ihn push.defaultfestgelegt zu tracking(oder upstreamin späteren Versionen von git).
Mark Longair
Ich verstehe nicht, warum Eclipse Egit dann beides bietet?
HaveAGuess
23
@HaveAGuess Wahrscheinlich aus dem gleichen Grund, aus dem Eclipse sowohl Elend als auch Verzweiflung bietet.
Twiz
9

Dies ist nicht mehr aktuell!

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
quelle
1
Aber wofür steht Flagge -ujetzt? Es wird von GitHub weiterhin empfohlen, dieses Flag zu verwenden, wenn wir ein neues Repo erstellen ...
Jean Paul
8
@JeanPaul - Die Option -u führt Folgendes aus: Fügen Sie für jeden Zweig, der aktuell ist oder erfolgreich gepusht wurde, eine Upstream-Referenz (Tracking-Referenz) hinzu, die von git-pull ohne Argumente und anderen Befehlen verwendet wird. Nachdem Sie Ihren lokalen Zweig mit der Option -u verschoben haben, wird dieser lokale Zweig automatisch mit dem Remote-Zweig verknüpft, und Sie können git pull ohne Argumente verwenden.
Peter Piper