git: Zweig wechseln, ohne den Kopf abzunehmen

101

Ich habe ein Repository auf Github mit einem Hauptzweig (Master) und einem Zweig für einige experimentelle Arbeiten. Ich machte einige Verpflichtungen und ging zum experimentellen Zweig und alles war in Ordnung.

Jetzt versuche ich auf einem anderen Computer, mein Repository (Git Clone Repository ) zu klonen und dann zum experimentellen Zweig (Git Checkout Branchname ) zu wechseln, aber jedes Mal, wenn ich dies tue, löst sich mein Kopf und ich kann meine Änderungen nicht weitergeben. Was mache ich falsch? Ich habe das Gefühl, dass mir irgendwo ein grundlegendes Git-Konzept fehlt, aber das Lesen von zufälligen Git-Manpages gibt mir keine Hinweise.

Ich bin neu in Git, also tut es mir leid, wenn ich ein Idiot bin, aber ich kann in den Dokumenten nichts finden, was mir helfen könnte, meinen Kopf wieder anzubringen.

BEARBEITEN

Das Konzept eines Tracking-Zweigs hat mir gefehlt. Jetzt, wo ich dieses Konzept verstehe, ist alles klar. Persönlich finde ich die git branch --trackSyntax viel intuitiver als git checkout -b branch-name origin/branch-name.

Danke für die Hilfe!

Dana Robinson
quelle
Verwenden Sie git switch: siehe meine Antwort unten, um den Zweig mit Git 2.23 (August 2019) zu wechseln, ohne den Kopf abzunehmen .
VonC

Antworten:

114
# first time: make origin/branchname locally available as localname
git checkout -b localname origin/branchname 

# othertimes 
git checkout localname 

git push origin

Der Einfachheit halber können
Sie dieselbe Zeichenfolge für localname & branchname verwenden. Beim origin/branchnameAuschecken haben Sie einen Zweig nicht wirklich ausgecheckt . origin/branchnameist ein "entfernter" Name, mit dem Sie eine Liste erhalten können

branch -a 

Wenn Sie Farben aktiviert haben, haben lokale Zweige eine Farbe und entfernte eine andere.

Sie müssen zuerst einen lokal verfolgten Remote-Zweig erstellen, um darauf umschalten und daran arbeiten zu können.

Kent Fredric
quelle
9
Mann, warum beginnt "git checkout origin / branchname" nicht automatisch, den Zweig zu verfolgen, wenn er noch nicht verfolgt wird?
Martin Konicek
4
weil Sie noch einen lokalen Namen für die Auslandsniederlassung benötigen.
Kent Fredric
Folgendes mache ich und die Fehlermeldung: $ git checkout -b topic / fetch upstream / topic / fetch fatal: git checkout: Das Aktualisieren von Pfaden ist nicht kompatibel mit dem Wechseln von Zweigen. Wollten Sie 'upstream / topic / fetch' auschecken, das nicht als Commit aufgelöst werden kann?
ulu
2
Danke für den Tipp zu Farben. So aktivieren Sie Farben:git config --global --add color.ui true
PonyEars
1
Es ist erwähnenswert, dass "Ursprung / Zweigname" buchstäblich alles sein kann, was sich in einen SHA1 oder einen SHA1 an sich auflöst =). Ich benutze das regelmäßig, um beliebige Zweige mit beliebigen Wurzeln zu erstellen.
Kent Fredric
16
git clone [email protected]:abc/def.git
cd def

Erstellen Sie nun einen Tracking-Zweig:

git branch --track experimental origin/experimental
git checkout experimental

Dann, nachdem Sie dort gearbeitet haben, schieben Sie einfach zu Github vorbei

git push
Christoph Rüegg
quelle
3
Git Branch -t Ursprung / experimentelle # müssen nicht so viel
Dustin
Der Zweig, den ich verfolgen möchte, heißt topic / fetch. Wenn ich versuche, $ git branch --track topic / fetch upstream / topic / fetch auszuführen, heißt es fatal: Kein gültiger Objektname: 'upstream / topic / fetch'.
ulu
1
@Dustin, dieser Befehl erstellt einen lokalen Zweig 'origin / experimental', der den lokalen Master verfolgt. Ich vermute, es ist ein ziemlich häufiger Fehler.
PDug
1
@PDug% git checkout -t Ursprung / experimenteller Zweig experimentell eingerichtet, um den entfernten Zweig experimentell vom Ursprung durch erneutes Basieren zu verfolgen. Wechsel zu einem neuen Zweig 'experimentell'
Dustin
11

Um die Antwort von Kent zu erweitern, haben Sie nach dem Klonen nur einen Zweig (Fernbedienungen zählen nicht), der in dem Repository aktiv war, aus dem Sie geklont haben - in Ihrem Fall Master.

Zunächst möchten Sie einen neuen Zweig erstellen, um den experimentellen Remote-Zweig zu verfolgen:

$ git branch experimental origin/experimental

und dann schau es dir an:

$ git checkout experimental

Kent ist jedoch korrekt - diese beiden Befehle können kombiniert werden

$ git checkout -b experimental origin/experimental
Pat Notz
quelle
3

Mit Git 2.23 (August 2019) würden Sie den git switchBefehl verwenden

Wenn Sie einen gleichnamigen Remote-Zweig haben, wird dieser automatisch nachverfolgt:

$ git switch new-topic
Branch 'new-topic' set up to track remote branch 'new-topic' from 'origin'
Switched to a new branch 'new-topic'
VonC
quelle