TL;DR
Verwendung von git switch
statt git checkout
. Weitere Details finden Sie auf dieser Seite.
Ich denke, die Antwort ist überholt. Git hat einige Funktionen von checkout
jetzt auf switch
und restore
aufgeteilt.
Hier ist meine Zusammenfassung:
Wenn Sie etwas für einen Remote-Branch aktualisieren möchten, sollten Sie einen lokalen Branch erstellen, um den Remote-Branch "zu verfolgen". Sie können alles aktualisieren, was Sie möchten, lokal und schließlich auf Remote pushen. Wenn Sie direkt nach dem Klonen Ihres Repositorys zum Remote-Branch wechseln, sehen Sie möglicherweise den Status "detached HEAD" und die folgende Nachricht von Git:
Hinweis: Wechsel zu 'origin/asd'.
Sie befinden sich im Zustand des "detached HEAD". Sie können umschauen, experimentelle
Änderungen vornehmen und diese commiten, und Sie können alle Commits, die Sie in diesem
Zustand machen, verwerfen, ohne dass sich dies auf Branches auswirkt, indem Sie wieder
auf einen Branch wechseln.
Wenn Sie einen neuen Branch erstellen möchten, um die von Ihnen erstellten Commits beizubehalten,
können Sie dies (jetzt oder später) mit -c und dem switch-Befehl tun. Beispiel:
git switch -c
Oder diese Operation mit rückgängig machen:
git switch -
Diesen Hinweis ausschalten, indem Sie die Konfigurationsvariable advice.detachedHead auf false setzen
HEAD befindet sich jetzt bei d3e1083 Update a
Wie können wir also einen lokalen Branch erstellen, um einen Remote-Branch zu verfolgen?
Um einen lokalen Branch zu erstellen, um einen Remote-Branch zu verfolgen, können Sie git checkout
oder git switch
verwenden. Wenn Sie eine Datei oder einen Ordner mit dem gleichen Namen wie Ihr Remote-Branch-Namen haben, würde git checkout
einige Fehlermeldungen ausgeben, aber git switch
funktioniert normal!
Beispiel:
-
Alle Branches anzeigen, und wir möchten einen lokalen Branch erstellen, um den Remote-Branch remotes/origin/asd
zu verfolgen, und wir haben auch den Dateinamen asd
:
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/asd
remotes/origin/ereres
remotes/origin/master
remotes/origin/zxc
$ ls
a asd
-
Der Dateiname ist gleich wie der Remote-Branch, und Git sollte einige Fehlermeldungen ausgeben, wenn wir den Befehl git checkout
verwenden, um einen lokalen Branch zu erstellen, der einen Remote-Branch verfolgt
$ git checkout asd
fatal: 'asd' könnte sowohl eine lokale Datei als auch ein Tracking-Branch sein.
Bitte verwenden Sie -- (und optional --no-guess), um zu entwirren
-
Es funktioniert, wenn wir git switch
verwenden!
$ git switch ereres
Branch 'ereres' wurde eingerichtet, um den Remote-Branch 'ereres' von 'origin' zu verfolgen.
Zu einem neuen Branch 'ereres' gewechselt
$ git branch -vv
* ereres 3895036 [origin/ereres] Update a
master f9e24a9 [origin/master] Merge branch 'master' of
52 Stimmen
Ich denke, dieser Thread ist nicht hilfreich. Nichts scheint zu funktionieren, die ursprüngliche Frage scheint in vielen der Antworten verloren gegangen zu sein. Ich habe jedes Wort gelesen, alles unten ausprobiert und habe keine Ahnung, wie man das machen soll, was der OP machen möchte.
58 Stimmen
Ich habe das Gefühl, als würde ich verrückt werden. Ich versuche, einen branch von einem
upstream
und nicht nur vonorigin
zu auszuchecken, und jede empfohlene Antwort ist überhaupt nicht hilfreich (im wahrsten Sinne des Wortes). EDIT - entschuldigen Sie bitte, die Vielzahl der Vorschläge in den beiden erstplatzierten Antworten war nutzlos; der dritte (git branch test origin/test
) funktioniert. Schön, dass die beiden ersten Antworten 20x so viele Stimmen haben...0 Stimmen
Vielleicht nützlich für jemand anderen: Als ich die Atom-Editor-Benutzeroberfläche benutzte, um Änderungen abzurufen und zu ziehen, zog sie Änderungen am "main" branch, aber erstellte keine lokale Referenz zum zweiten Remote-Branch. Die Verwendung von
git fetch
in der Befehlszeile hat diese Referenz erstellt, dann konnte ich den Branch gemäß mehrerer Antworten auschecken.0 Stimmen
Aus der ersten Antwort, wenn es nur ein Remote gibt, funktioniert Folgendes: git fetch, gefolgt von git switch test
0 Stimmen
Dieses Frage muss umbenannt werden, sie ist schlecht ausgerichtet mit dem Inhalt und Google-Bombs andere Fragen auf SO, die das Thema besser behandeln (z.B. jede Antwort hier hat bei mir versagt - aber sie beantworten alle verschiedene Interpretationen der Frage, also ist das keine Überraschung). Für zukünftige Leser: Tun Sie nichts in dieser SO-Frage/Antworten! Schließen Sie diesen Tab und suchen Sie erneut auf SO, finden Sie eine andere Frage zum selben Thema.
10 Stimmen
git fetch
danngit switch
1 Stimmen
Zumindest im modernen (2022) git-Kontext wäre der Befehl
git fetch origin test
vorgit checkout origin/test
erforderlich.0 Stimmen
Für mich hat das geholfen: stackoverflow.com/a/25941875/38940
5 Stimmen
Diese Antwort sollte archiviert werden. Es ist nicht nützlich, Leuten Antworten zu zeigen, die so alt sind. Stackoverflow sollte einen aktualisierten Antwort-Button haben.
0 Stimmen
Was ich heute gemacht habe: Ich habe einen weiteren Branch-Test von einer anderen Maschine erstellt, auf die ich einen Remote-Branch gepusht habe. Aus irgendeinem Grund kann ich nicht mehr auf diese Maschine zugreifen, und ich habe von einer anderen Maschine aus "git checkout test" versucht. Es hat nicht funktioniert und sagte "Fehler: Pfadangabe 'test' stimmt mit keiner Datei überein, die git bekannt ist." Dann habe ich "git pull" ausgeführt, dann wieder "git checkout test", und ich konnte jetzt zu diesem Branch wechseln: "Branch 'test' eingerichtet, um Remote-Branch 'test' von 'origin' zu verfolgen."
0 Stimmen
In meinem Fall habe ich einfach den Namen des Remote-Zweigs FALSCH geschrieben. Wenn keiner der hier aufgeführten Methoden für dich funktioniert hat, überprüfe deine Rechtschreibung...