Frage Warum muss ich "--set-upstream" die ganze Zeit tun?


Ich erstelle einen neuen Zweig in Git:

git branch my_branch

Drück es:

git push origin my_branch

Jetzt sagen Sie, dass jemand einige Änderungen auf dem Server vorgenommen hat und ich davon ziehen möchte origin/my_branch. Ich mache:

git pull

Aber ich bekomme:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.my_branch.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.

If you often merge with the same branch, you may want to
use something like the following in your configuration file:

    [branch "my_branch"]
    remote = <nickname>
    merge = <remote-ref>

    [remote "<nickname>"]
    url = <url>
    fetch = <refspec>

See git-config(1) for details.

Ich habe gelernt, dass ich damit arbeiten kann:

git branch --set-upstream my_branch origin/my_branch

Aber warum muss ich das für jeden Zweig tun, den ich erstelle? Ist es nicht offensichtlich, wenn ich dränge my_branch in origin/my_branchDann würde ich ziehen wollen origin/my_branch in my_branch? Wie kann ich dies zum Standardverhalten machen?


1057
2018-05-22 16:39


Ursprung


Antworten:


Eine Verknüpfung, die nicht davon abhängt, sich an die Syntax zu erinnern git branch --set-upstream  1 ist zu tun:

git push -u origin my_branch

... das erste Mal, dass Sie diesen Zweig drücken. Sie müssen es nur einmal tun, und das richtet die Verbindung zwischen Ihrem Zweig und dem bei origin auf die selbe Art und Weise wie git branch --set-upstream tut.

Persönlich denke ich, dass es eine gute Sache ist, diese Verbindung zwischen Ihrer Zweigstelle und einer auf der entfernten Seite explizit einzurichten. Es ist nur eine Schande, dass die Regeln sind anders für git push und git pull.


1 Es mag albern klingen, aber ich vergesse oft, den aktuellen Zweig anzugeben, vorausgesetzt, das ist der Standard - es ist nicht, und die Ergebnisse sind am verwirrendsten :)

Update 2012-10-11: Anscheinend bin ich nicht die einzige Person, die es leicht fand, falsch zu liegen! Dank an VonC um darauf hinzuweisen, dass Git 1.8.0 das Offensichtlichste einführt git branch --set-upstream-to, die wie folgt verwendet werden kann, wenn Sie auf dem Zweig sind my_branch:

git branch --set-upstream-to origin/my_branch

... oder mit der kurzen Option:

git branch -u origin/my_branch

Diese Änderung und ihre Begründung wird in beschrieben die Release Notes für Git 1.8.0, Release Candidate 1:

Es war verlockend zu sagen git branch --set-upstream origin/master, aber das sagt Git, um den lokalen Zweig zu arrangieren origin/master mit dem aktuell ausgecheckten Zweig zu integrieren, was sehr unwahrscheinlich ist, was der Benutzer gemeint hat. Die Option ist veraltet. nutze das Neue --set-upstream-to (mit einem kurz-und-süß -u) stattdessen.


1199
2018-05-22 16:58



Sie können dies mit weniger Tipparbeit möglich machen. Ändere zuerst die Art, wie dein Push funktioniert:

git config --global push.default current

Dies wird den Schluss ziehen origin my_branch Teil, also können Sie tun:

git push -u

Dadurch wird der entfernte Zweig mit demselben Namen erstellt und verfolgt.


962
2018-04-08 10:14



Du kannst es einfach

git checkout -b my-branch origin/whatever

an erster Stelle. Wenn Sie einstellen branch.autosetupmerge oder branch.autosetuprebase (mein Favorit) zu always (Standard ist true), my-branch wird automatisch nachverfolgt origin/whatever.

Sehen git help config.


70
2018-03-17 20:04



Sie können den Upstream auf zwei Arten einfacher einstellen. Zuerst beim Erstellen der Verzweigung:

git branch -u origin/my-branch

oder nachdem Sie eine Verzweigung erstellt haben, können Sie diesen Befehl verwenden.

git push -u origin/my-branch

Sie können auch in einem einzigen Befehl verzweigen, auschecken und Upstream festlegen:

git checkout -b my-branch -t origin/my-branch

Ich persönlich bevorzuge dies in einem zweistufigen Befehl:

git checkout -b my-branch
git push -u origin/my-branch

44
2018-03-17 13:28



Sie können verwenden:

git config --global branch.autosetupmerge immer

Dadurch wird der Upstream-Zweig jedes Mal verknüpft, wenn Sie einen neuen Zweig erstellen oder auschecken.

Sehen https://felipec.wordpress.com/2013/09/01/advanced-git-concepts-the-upstream-tracking-branch/

Dies funktioniert auch mit autosetuprebase, wenn Sie einen stärker auf die Rebase ausgerichteten Workflow verfolgen, aber nicht verwenden, wenn Sie nicht genau wissen, was Sie tun, da dies Ihr Pull-Verhalten zum Rebasieren zurücksetzt, was zu seltsamen Ergebnissen führen kann.


36
2018-04-28 20:05



By the way, die Verknüpfung, um den aktuellen Zweig zu einer Fernbedienung mit dem gleichen Namen zu schieben:

$ git push -u origin HEAD

29
2017-09-15 14:20



Dies ist meine häufigste Verwendung für Der Fick.

$ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

$ fuck
git push --set-upstream origin master [enter/↑/↓/ctrl+c]
Counting objects: 9, done.
...

Es macht auch Spaß, Schimpfwörter in Ihrem Terminal einzugeben.


27
2017-11-15 17:22



git branch --set-upstream-to=origin/master<branch_name>

11
2018-06-30 04:39



Sie können git pull auch explizit mitteilen, welche entfernte Verzweigung (wie in der Fehlermeldung erwähnt) zu ziehen ist:

git pull <remote-name> <remote-branch>

Sei vorsichtig dabei: Wenn Sie sich in einem anderen Zweig befinden und einen expliziten Pull ausführen, wird der Refspec, den Sie ziehen, in den Zweig eingefügt, in dem Sie sich befinden!


8
2018-03-20 14:41