Git Checkout Tag, Git Pull schlägt im Zweig fehl


133

Ich habe ein Git-Repository geklont und dann ein Tag ausgecheckt:

# git checkout 2.4.33 -b my_branch

Dies ist in Ordnung, aber wenn ich versuche, git pullin meinem Zweig zu laufen , spuckt git diesen Fehler aus:

Es gibt keine Tracking-Informationen für den aktuellen Zweig. Bitte geben Sie an, mit welchem ​​Zweig Sie zusammenführen möchten. Siehe Git-Pull (1) für Details

git pull <remote> <branch>

Wenn Sie Tracking-Informationen für diesen Zweig festlegen möchten, können Sie dies tun mit:

git branch --set-upstream new origin/<branch>

Ich möchte git pullnur den Hauptzweig aktualisieren und meinen aktuellen Zweig in Ruhe lassen (es ist sowieso ein Tag). Ist so etwas möglich?

Der Grund, warum ich das brauche, ist, dass ich ein automatisches Skript habe, das immer das Repository abruft und natürlich aufgrund des obigen Fehlers fehlschlägt.


Antworten:


114

Bearbeiten: Für neuere Versionen von Git, --set-upstream masterdie veraltet sind, sollten Sie --set-upstream-tostattdessen verwenden:

git branch --set-upstream-to=origin/master master

Nach Aufforderung können Sie einfach Folgendes ausführen:

git branch --set-upstream master origin/master

Danach können Sie einfach ausführen git pull, um Ihren Code zu aktualisieren.


5
Dies löste das Problem. Aber ich muss noch verstehen, wie mein Hauptzweig den Bezug zur Herkunft verloren hat. Ich war auf einem Ast und tat es git checkout master. Ich konnte es nicht tun, git pullweil der Bezug zur Herkunft verloren ging. Jetzt gehts. Danke dir!
Ariel

'git branch --set-upstream-to = origin / master master my_branch' hat bei mir funktioniert
Blue Clouds

90

Ich hatte das gleiche Problem und habe es mit diesem Befehl behoben:

$ git push -u origin master

Aus der Hilfedatei legt das -u im Grunde den Standard für Pulls fest:

-u, --set-upstream`

  For every branch that is up to date or successfully pushed, add 
  upstream (tracking) reference, used by argument-less git-pull(1) and
  other commands. For more information, see branch.<name>.merge in 
  git-config(1).

48

Versuchen Sie diese Befehle:

git pull origin master
git push -u origin master

9

Wechseln Sie mit zum Hauptzweig zurück

$ git checkout master

und führen Sie dann die git pullOperation aus

$ git pull origin/master

Danach können Sie wieder zu Ihrem wechseln my_branch.


6
Genau das versuche ich zu vermeiden. Ich wollte wissen, ob es einen "offiziellen" Weg gibt, dies zu tun.
Alesko

5

@alesko : Es ist nicht möglich, nur git pullnach dem Auschecken nur den Zweig my_branchzu aktualisieren master.
Denn git pullwird auch mit dem aktuellen Zweig zusammengeführt -> in Ihrem Szenario zummy_branch

@ Simon : das macht auch den Push. warum ist das so?

$ git branch -u origin/master
Branch master set up to track remote branch master from origin.

und laut docs:

-u <upstream>
  Set up <branchname>'s tracking information so <upstream> is considered  
  <branchname>'s upstream branch. If no <branchname> is specified,  
  then it defaults to the current branch.

4

Stellen Sie zunächst sicher, dass Sie sich auf dem richtigen Ast befinden.
Dann (nur einmal):

git branch --track

Danach funktioniert das wieder:

git pull

4

Möglicherweise haben Sie mehrere Zweige. Und Ihre aktuelle Niederlassung hat ihren Upstream nicht in Remote eingestellt.

Schritte, um dies zu beheben:

git checkout branch_name
git branch --set-upstream-to=origin/remote_branch_name local_branch_name

z.B

// this set upstream of local branch develop to remote branch  origin/develop,
git branch --set-upstream-to=origin/develop develop

Wenn Sie dies tun git pull, wird es aus dem angegebenen Zweig gezogen.


3

Sie können angeben, welchen Zweig Sie ziehen möchten:

git pull origin master

Oder Sie können es so einrichten, dass Ihr lokaler Hauptzweig den Github-Hauptzweig als Upstream verfolgt:

git branch --set-upstream-to=origin/master master
git pull

Diese Zweigstellenverfolgung wird automatisch für Sie eingerichtet, wenn Sie ein Repository klonen (nur für die Standardverzweigung). Wenn Sie jedoch einem vorhandenen Repository eine Fernbedienung hinzufügen, müssen Sie die Verfolgung selbst einrichten. Zum Glück macht es der Rat von git ziemlich einfach, sich daran zu erinnern, wie es geht.

--set-upstream ist in git 1.9.x anscheinend veraltet. In Zukunft möchten Sie so etwas wie verwenden

git branch -u origin/master

vorausgesetzt, Sie haben den Master bereits ausgecheckt. Wenn nicht, git branch -u origin/master masterwird funktionieren


2

Versuche dies

git checkout master

git pull origin master

2
Dies beantwortet die Frage nicht wirklich. Auch wenn es keine akzeptierte Antwort gibt, ist die am besten
gewählte

1

Sie müssen Ihr Tracking (Upstream) für den aktuellen Zweig einrichten

git branch --set-upstream master origin/master

Ist bereits veraltet, stattdessen können Sie das Flag --track verwenden

git branch --track master origin/master

Ich mag auch die Dokumentreferenz, die @casey bemerkt:

-u <upstream>
  Set up <branchname>'s tracking information so <upstream> is considered  
  <branchname>'s upstream branch. If no <branchname> is specified,  
  then it defaults to the current branch.

1

Was für mich funktioniert hat war: git branch --set-upstream-to = origin master Als ich wieder einen Pull machte, bekam ich nur die Updates vom Master und die Warnung ging weg.


1

Wenn Sie dies wie ich ständig tun müssen, können Sie einen Alias ​​einrichten, um dies automatisch zu tun, indem Sie Ihrer .gitconfigDatei Folgendes hinzufügen :

[alias]
    set-upstream = !git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`

Wenn Sie die Nachricht sehen There is no tracking information..., nur laufen git set-upstream, dann git pushwieder.

Vielen Dank an https://zarino.co.uk/post/git-set-upstream/


0

Um nur Updates herunterzuladen:

git fetch origin master

Dadurch wird jedoch nur eine aufgerufene Referenz aktualisiert origin/master. Der beste Weg, um Ihr lokales zu aktualisieren, masterwäre das Auschecken / Zusammenführen, das in einem anderen Kommentar erwähnt wird. Wenn Sie garantieren können, dass Ihr Lokal masternicht von der eingeschalteten Hauptleitung abgewichen origin/masterist, können Sie dies tun verwenden git update-refIhre aktuelle abzubilden masterzum neuen Punkt, aber das ist wahrscheinlich nicht die beste Lösung auf einer regelmäßigen Basis zu verwenden ...


0

Dieser Befehl ist veraltet: git branch --set-upstream master origin/master

Wenn Sie also versuchen, das Tracking einzurichten, ist dies der Befehl, der für mich funktioniert hat:

git branch --set-upstream-to=origin/master master
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.