2009-01-22 3 views
75

Ich habe ein Repository auf Github mit einem Hauptzweig (Master) und einem Zweig für einige experimentelle Arbeit. Ich machte einige Commits und schob mich in den experimentellen Zweig und alles war in Ordnung.Git: Switch Zweig ohne Kopf ablösen

nun auf einer anderen Maschine, versuche ich mein Repository (git clone Repository) und dann auf die experimentellen Zweig wechseln zu klonen (git Kasse branch), aber jedes Mal, wenn ich dies tun meinen Kopf freistehend wird und ich kann meine Änderungen nicht drücken. Was mache ich falsch? Ich habe das Gefühl, dass ich irgendwo ein grundlegendes Git Konzept verpasse, aber zufällige Git Man Seiten zu lesen gibt mir keine Hinweise.

Ich bin neu bei Git, also tut es mir leid, wenn ich ein Idiot bin, aber ich kann nichts in den Dokumenten finden, das mir helfen wird, meinen Kopf wieder anzubringen.

EDIT

Das Konzept eines Tracking-Zweig ist das, was mir fehlte. Jetzt, da ich dieses Konzept kenne, ist alles klar. Persönlich finde ich die git branch --track Syntax viel intuitiver als git checkout -b branch-name origin/branch-name.

Danke für die Hilfe!

Antwort

88
# 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 kann man die gleiche Zeichenfolge für lokalerName & branch
verwenden, wenn Sie ausgecheckt origin/branchname Sie waren nicht wirklich eine Niederlassung Check-out. origin/branchname ist ein „remote“ Namen, und Sie können eine Liste von ihnen mit

branch -a 

bekommen Wenn Sie Farben aktiviert ist, werden die lokalen Niederlassungen eine Farbe sein, und entfernten anderen.

Sie müssen zunächst einen Remote-Zweig lokal überwachen, um zu diesem wechseln und daran arbeiten zu können.

+5

Man, warum nicht "git checkout Herkunft/Branchname" beginnen, den BH zu verfolgen nch automatisch, wenn es noch nicht verfolgt wird? –

+2

, weil Sie immer noch einen lokalen Namen für die ausländische Niederlassung benötigen. –

+0

Hier ist, was ich tue, und die Fehlermeldung: $ git checkout -b topic/fetch upstream/topic/fetch fatal: git checkout: Aktualisieren von Pfaden ist inkompatibel mit Switching-Filialen. Wollten Sie "upstream/topic/fetch" auschecken, was nicht als Commit gelöst werden kann? – ulu

12
git clone [email protected]:abc/def.git 
cd def 

nun eine Tracking-Zweig erstellen:

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

Dann, nachdem die dort arbeiten, drücken Sie einfach auf Github von

git push 
+3

git branch -t Herkunft/experimentell # muss nicht so viel tippen :) – Dustin

+0

Der Zweig, den ich verfolgen möchte, heißt topic/fetch. Wenn ich versuche, zu tun $ git Zweig --track Thema/fetch upstream/topic/fetch es heißt, fatal: Kein gültiger Objektname: 'upstream/topic/fetch'. – ulu

+0

@Dustin, dieser Befehl erstellt einen lokalen Zweig 'Ursprung/experimentell', der den lokalen Master verfolgt. Ich schätze, es ist ein ziemlich häufiger Fehler. – PDug

10

auf Kent Antwort zu erweitern, nachdem Sie Ihren Klon tun, um die nur die Verzweigung, die du haben wirst (Fernbedienungen zählen nicht), ist diejenige, die in dem Repository aktiv war, von dem du geklont hast - Meister in deinem Fall.

Also, wollen Sie zuerst einen neuen Zweig erstellen, die Remote-experimentellen Zweig verfolgen:

$ git branch experimental origin/experimental 

und dann check out:

$ git checkout experimental 

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

$ git checkout -b experimental origin/experimental