Wie kann ich in git zu einem anderen Zweig wechseln?

221

Welche dieser Zeilen ist richtig?

git checkout 'another_branch'

Oder

git checkout origin 'another_branch'

Oder

git checkout origin/'another_branch'

Und was ist der Unterschied zwischen diesen Zeilen?


Benyamin Jafari
quelle
32
git checkout [branch]für die meisten Benutzer, die zu dieser Frage kommen
JGallardo

Antworten:

225

Wenn es another_branchbereits lokal vorhanden ist und Sie sich nicht in diesem Zweig befinden, git checkout another_branchwechseln Sie zum Zweig.

Wenn another_branches nicht existiert, aber existiert origin/another_branch, git checkout another_branchist es äquivalent zu git checkout -b another_branch origin/another_branch; git branch -u origin/another_branch. Das ist erstellen another_branchaus origin/another_branchund Set origin/another_branchals vor another_branch.

Wenn keines vorhanden ist, wird ein git checkout another_branchFehler zurückgegeben.

git checkout origin another_branchGibt in den meisten Fällen einen Fehler zurück. Wenn origines sich um eine Revision und another_brancheine Datei handelt, wird die Datei dieser Revision ausgecheckt, aber höchstwahrscheinlich ist dies nicht das, was Sie erwarten. originist vor allem in verwendet git fetch, git pullund git pushals Fernbedienung, ein Alias der URL zur Remote - Repository.

git checkout origin/another_brancherfolgreich, wenn origin/another_branchvorhanden. Es führt dazu, dass es sich in einem abgetrennten HEAD-Zustand befindet, nicht in einem Zweig. Wenn Sie neue Commits vornehmen, sind die neuen Commits von keinem vorhandenen Zweig aus erreichbar und keiner der Zweige wird aktualisiert.

UPDATE :

Da 2.23.0 veröffentlicht wurde, können wir damit auch git switchZweige erstellen und wechseln.

Wenn foovorhanden, versuchen Sie zu wechseln zu foo:

git switch foo

Wenn foonicht vorhanden ist und origin/foovorhanden ist , versuchen zu erstellen fooaus origin/foound wechseln Sie dann zu foo:

git switch -c foo origin/foo
# or simply
git switch foo

Wenn foodies nicht vorhanden ist, versuchen Sie im Allgemeinen, fooaus einem bekannten Verweis oder Commit zu erstellen , und wechseln Sie dann zu foo:

git switch -c foo <ref>
git switch -c foo <commit>

Wenn wir gleichzeitig ein Repository in Gitlab und Github verwalten, verfügt das lokale Repository möglicherweise über zwei Fernbedienungen, z. B. originfür Gitlab und githubfür Github. In diesem Fall hat das Repository origin/foound github/foo. git switch foowird sich beschweren fatal: invalid reference: foo, weil es nicht bekannt ist, aus welchem ​​ref origin/foooder github/foozu erstellen foo. Wir müssen es mit git switch -c foo origin/foooder git switch -c foo github/foonach Bedarf spezifizieren . Wenn Sie Zweige aus beiden Remote-Zweigen erstellen möchten, ist es besser, unterscheidende Namen für die neuen Zweige zu verwenden:

git switch -c gitlab_foo origin/foo
git switch -c github_foo github/foo

Wenn foovorhanden, versuchen Sie, eine bekannte Referenz oder ein Commit neu zu erstellen / zu erzwingen foo(oder auf diese zurückzusetzen foo) und wechseln Sie dann zu foo:

git switch -C foo <ref>
git switch -C foo <commit>

die gleichbedeutend sind mit:

git switch foo
git reset [<ref>|<commit>] --hard

Versuchen Sie, zu einem getrennten HEAD eines bekannten Refs oder Commits zu wechseln:

git switch -d <ref>
git switch -d <commit>

Wenn Sie nur einen Zweig erstellen möchten, aber nicht zu diesem wechseln möchten, verwenden Sie git branchstattdessen. Versuchen Sie, einen Zweig aus einem bekannten Verweis oder Commit zu erstellen:

git branch foo <ref>
git branch foo <commit>
ElpieKay
quelle
24
Diese Antwort ist richtig (wie üblich, und upvoted), aber ich werde einen Kommentar hinzufügen, kann hilfreich sein: Der git checkoutBefehl hat zu viele Dinge, meiner Meinung nach . Deshalb gibt es hier so viele Betriebsarten. Wenn das einzige , was git checkouttut , war Schalter Zweig, wäre die Antwort einfach sein, aber es kann auch schaffen Zweige und sogar Dateien aus bestimmten Commits extrahieren , ohne Zweig zu wechseln.
Torek
11
Dies ist die richtige Antwort, zeigt aber, wie git in der Kommandozeile irgendwie durcheinander ist. Git Checkout, um den Zweig zu wechseln?
Thang
3
@thang Nun, mit Release 2.23.0 ist dies behoben: Sie können jetzt git switchzu einem Zweig wechseln.
Legends2k
Switch scheint für diese Version von Git nicht zu funktionieren. Womit wechsle ich in dieser Version von git zu einem anderen Zweig? C: \ widget> git --version git Version 2.11.0.windows.3 C: \ widget> git switch master git: 'switch' ist kein git-Befehl. Siehe 'git --help'. C: \ widget>
John
1
@ John verwenden git checkoutstattdessen für alte Versionen, die auch in modernen Versionen funktioniert.
ElpieKay
66

Wechseln zu einem anderen Zweig in Git. Einfache Antwort,

git-checkout - Zweige wechseln oder Arbeitsbaumdateien wiederherstellen

git fetch origin         <----this will fetch the branch
git checkout branch_name <--- Switching the branch

Stellen Sie vor dem Wechseln des Zweigs sicher, dass Sie keine geänderten Dateien haben. In diesem Fall können Sie die Änderungen festschreiben oder sie speichern.

baumelnder Zeiger
quelle
Der letzte Befehl bringt mich in den getrennten HEAD-Zustand. Das heißt, man kann den Zweig nicht bearbeiten.
2
Der Zweig, den Sie auschecken möchten, wird nicht abgerufen. Sie müssen ihn dann vor dem Auschecken abrufen. Sie können den Abruf überspringen, wenn der Zweig auf dem neuesten Stand ist, und dann einfach den Zweignamen von git checkout verwenden.
Danglingpointer
Wäre es nicht ausreichend, nach dem Wechsel zum Zweig einen "Git Pull" durchzuführen?
ziehen auch ok, ziehen macht den Abruf und verschmelzen im Hintergrund. Ich sehe keinen Unterschied.
Danglingpointer
17

[ git checkout "branch_name"]

ist eine andere Art zu sagen:

[ git checkout -b branch_name origin/branch_name]

falls "branch_name" nur remote existiert .

[ git checkout -b branch_name origin/branch_name] ist nützlich, wenn Sie mehrere Fernbedienungen haben.

In Bezug auf [ git checkout origin 'another_branch'] bin ich mir nicht sicher, ob dies möglich ist. AFAK Sie können dies mit dem Befehl "fetch" tun - [ git fetch origin 'another_branch']

Mehdi
quelle
Ich kenne den Befehl "git checkout -b branchName" zum Erstellen eines weiteren Zweigs. Das war nicht die Frage!
10

Mit Git 2,23 ab, kann man verwenden git switch <branch name>Zweigen umzuschalten.

gkw
quelle
6

Was für mich funktioniert hat, ist Folgendes:

Wechseln Sie in den gewünschten Zweig:

git checkout -b BranchName

Und dann zog ich den "Meister" vorbei:

git pull origin master
Karam Qusai
quelle
6

Nützliche Befehle für die Arbeit im täglichen Leben:

git checkout -b "branchname" ->  creates new branch
git branch                   ->  lists all branches
git checkout "branchname"    ->  switches to your branch
git push origin "branchname" ->  Pushes to your branch
git add */filename           -> Stages *(All files) or by given file name
git commit -m "commit message" -> Commits staged files
git push                     -> Pushes to your current branch
pola
quelle
5

Wenn Sie möchten, dass der Zweig den Remote-Zweig verfolgt, was sehr wichtig ist, wenn Sie Änderungen am Zweig festschreiben und Änderungen usw. abrufen möchten, müssen Sie für die eigentliche Kaufabwicklung ein -t hinzufügen, z. git checkout -t branchname

Matthew Joughin
quelle
4

Prüfen : git branch -a

Wenn Sie nur einen Zweig bekommen. Führen Sie dann die folgenden Schritte aus.

  • Schritt 1 : git config --list
  • Schritt 2 : git config --unset remote.origin.fetch
  • Schritt 3 : git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
Pavan
quelle
2
Ich frage mich, wie diese Befehlsreihe zu einem anderen Zweig wechseln würde.
Dies kann nützlich sein, wenn Sie zuvor einen flachen Klon (mit dem depthParameter) erstellt haben und sich jetzt fragen, warum Sie keine anderen Remote-Zweige abrufen können, um error: pathspec 'another_branch' did not match any file(s) known to gitdie oben vorgeschlagenen Befehle zu erhalten. Es ist sicherlich nicht das, worum es bei der ursprünglichen Frage ging, aber es kann anderen helfen, sich hier am Kopf zu kratzen.
Luciash d 'ist der
0

Ich benutze dies, um einen Zweig zu einem anderen zu wechseln. Jeder, den Sie verwenden können, funktioniert für mich wie ein Zauber.

git switch [branchName] ODER git checkout [branchName]

Beispiel: Git Switch entwickeln ODER
Git Checkout entwickeln

Rohit Chaurasiya
quelle