it-swarm.com.de

Wie kann ich in git zu einer anderen Filiale wechseln?

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?


131
Benyamin Jafari

Wenn another_branch bereits lokal vorhanden ist und Sie sich nicht in diesem Zweig befinden, wechselt git checkout another_branch zum Zweig.

Wenn another_branch nicht existiert, aber Origin/another_branch existiert, dann entspricht git checkout another_branchgit checkout -b another_branch Origin/another_branch; git branch -u Origin/another_branch. Das ist, um another_branch aus Origin/another_branch zu erstellen und Origin/another_branch als Upstream von another_branch festzulegen.

Ist beides nicht vorhanden, gibt git checkout another_branch einen Fehler zurück.

git checkout Origin another_branch gibt in den meisten Fällen einen Fehler zurück. Wenn Origin eine Revision und another_branch eine Datei ist, wird die Datei dieser Revision ausgecheckt, aber höchstwahrscheinlich ist das nicht das, was Sie erwarten. Origin wird hauptsächlich in git fetch, git pull und git Push als Remote verwendet, als Alias ​​der URL zum Remote-Repository.

git checkout Origin/another_branch ist erfolgreich, wenn Origin/another_branch vorhanden ist. Es führt dazu, dass es sich in einem getrennten HEAD Zustand befindet, nicht in einem Zweig. Wenn Sie neue Festschreibungen vornehmen, können die neuen Festschreibungen nicht von vorhandenen Zweigen aus erreicht werden, und keiner der Zweige wird aktualisiert.

UPDATE:

Da 2.23.0 veröffentlicht wurde, können wir damit auch git switch verwenden, um Zweige zu erstellen und zu wechseln.

Wenn foo vorhanden ist, versuchen Sie, zu foo zu wechseln:

git switch foo

Wenn foo nicht existiert und Origin/foo existiert, versuchen Sie, foo aus Origin/foo zu erstellen, und wechseln Sie dann zu foo:

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

Wenn foo nicht vorhanden ist, versuchen Sie im Allgemeinen, foo aus einer bekannten Referenz oder einem Commit zu erstellen, und wechseln Sie dann zu foo:

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

Wenn wir ein Repository in Gitlab und Github gleichzeitig verwalten, verfügt das lokale Repository möglicherweise über zwei Remotes, z. B. Origin für Gitlab und github für Github. In diesem Fall hat das Repository Origin/foo und github/foo. git switch foo beschwert sich über fatal: invalid reference: foo, da nicht bekannt ist, aus welchem ​​Verweis, Origin/foo oder github/foo, foo zu erstellen ist. Wir müssen es je nach Bedarf mit git switch -c foo Origin/foo oder git switch -c foo github/foo spezifizieren. Wenn wir Zweige aus beiden entfernten 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 foo vorhanden ist, versuchen Sie, foo von einem bekannten Verweis oder Commit neu zu erstellen/zu erzwingen (oder foo auf zurückzusetzen), und wechseln Sie dann zu foo:

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

die äquivalent sind zu:

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

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

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

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

git branch foo <ref>
git branch foo <commit>
130
ElpieKay

Wechseln zu einem anderen Zweig in Git. Klare Antwort,

git-checkout - Wechselt zwischen Zweigen oder stellt funktionierende Baumdateien wieder her

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

Vergewissern Sie sich vor dem Wechseln des Zweigs, dass keine geänderten Dateien vorhanden sind. In diesem Fall können Sie die Änderungen festschreiben oder speichern.

49
danglingpointer

[git checkout "branch_name"]

ist eine andere Art zu sagen:

[git checkout -b branch_name Origin/branch_name]

falls "branch_name" existiert nur remote.

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

Bezüglich [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']

10
Mehdi

Überprüfen Sie: git branch -a

Wenn Sie nur einen Zweig erhalten. 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/*
2
pavan

Wenn die Verzweigung die entfernte Verzweigung verfolgen soll, was sehr wichtig ist, wenn Sie Änderungen an der Verzweigung vornehmen und Änderungen usw. abrufen möchten, müssen Sie für die eigentliche Prüfung ein -t hinzufügen, z. B .: git checkout -t branchname

2
Matthew Joughin

Ab Git 2.2 kann mit git switch <branch name> zwischen Zweigen gewechselt werden.

1
gkw