Kopieren Sie den Remote-Zweig in den lokalen Zweig in Git

Ankit Raj Goyal 15 Februar 2024
  1. die neueste und beste Methode zum Kopieren von Remote-Zweigstellen in lokale Zweigstellen in Git - git switch -c
  2. die alte Methode zum Kopieren von entfernten Zweigen in lokale Zweige in Git - git checkout
  3. Kopieren Sie den entfernten Zweig in den lokalen Zweig in Git mit der Option --copy im Befehl git branch
  4. Unterschied zwischen Git-Kopie und Klonen
Kopieren Sie den Remote-Zweig in den lokalen Zweig in Git

Dieses Tutorial zeigt, wie man den neuen Befehl git switch -c verwendet, um einen Remote-Branch in einen lokalen Branch zu kopieren. Wir werden zwei ältere Möglichkeiten besprechen, dies zu tun - git checkout remote branch to local und git branch mit dem Flag -c.

Wir kopieren die Inhalte nur in eine lokale Filiale, stellen aber keine Tracking-Beziehung zur Gegenstelle her. Der Anwendungsfall besteht hier darin, ein Backup zu erstellen oder den Inhalt zu untersuchen, aber wir möchten die Änderungen nicht in den Remote-Zweig zusammenführen.

die neueste und beste Methode zum Kopieren von Remote-Zweigstellen in lokale Zweigstellen in Git - git switch -c

Früher wurde der Befehl git checkout für mehrere Zwecke überladen. Es checkt in einen anderen Zweig ein und stellt Änderungen aus einem Commit wieder her.

Dies führte zu viel Verwirrung unter den Entwicklern.

Neuere Versionen von Git (Git v2.23, Q3 2019 und höher) haben einen neuen Befehl eingeführt – git switch, um in einen anderen Branch einzuchecken. Mit seiner Option --create können wir ihn verwenden, um einen neuen Zweig zu erstellen, wenn er nicht existiert, bevor wir zu ihm wechseln.

Dies ist jetzt die am besten empfohlene Methode, um einen Remote-Zweig in einen lokalen Zweig zu kopieren.

Wir richten ein Remote Repo mit ein paar Branches ein und listen diese mit dem Befehl git branch auf.

git branch -a

Setup Repo Multiple Branches

Auf dem Remote-Repository sieht es so aus:

Zweig zum Kopieren auf Remote

Wir kopieren den Branch mit dem Namen another_branch in unser lokales Repository.

Zuerst werden wir die entfernten Zweige mit dem Befehl git fetch in unser lokales Repository holen.

git fetch --all

Wir sehen, dass dies die entfernten Branches abruft.

Fetch Remote Branches

Wir erstellen nun mit dem Befehl git switch eine Kopie des origin/another_branch.

Wir übergeben ein paar Optionen - das Flag -c, um den neuen Kopierzweig zu erstellen (er existiert vorher nicht). Wir geben auch die Option --no-track an, weil wir nur eine Kopie des Zweigs und keinen Klon wollen (später in diesem Beitrag).

git switch -c <new_branch> <old_branch> --no-track

Git Switch New Local Copy

Dieser Befehl hat eine neue Kopie mit dem Namen new_local_copy erstellt und in diese gewechselt (gecheckt).

Keine Tracking-Beziehung umschalten

Wenn wir nun alle Branches in unserem lokalen Repository auflisten, verfolgt der kopierte Branch new_local_copy den von uns kopierten Branch another_branch nicht.

Verwenden Sie am besten den git switch remote branch, um eine Kopie davon in unserem lokalen Repository zu erstellen.

die alte Methode zum Kopieren von entfernten Zweigen in lokale Zweige in Git - git checkout

git checkout war ein Befehl, der in alten Git-Versionen viele Dinge tat. Einer von ihnen wechselte zu einer anderen Filiale.

Git checkout remote branch to local war also die alte Methode, um eine lokale Kopie zu erstellen.

Wir checken zuerst in den entfernten Zweig aus, den wir kopieren möchten. (Stellen Sie sicher, dass Sie zuerst die Äste holen.)

git checkout <remote_branch>

Als nächstes erstellen wir eine neue Kopie dieses Zweigs mit dem Befehl git branch. Wir übergeben wieder die Option --no-track, weil wir keine Tracking-Beziehung zwischen den beiden Zweigen erstellen möchten.

git branch <new_branc> --no-track

Git-Kopie mit Checkout

Wir sehen unten, dass der neu erstellte Branch den alten Remote-Branch nicht verfolgt.

Checkout kopieren, keine Tracking-Beziehung

Zwischen diesem alten Weg und dem neu eingeführten git switch-Befehl hat der git branch-Befehl die --copy-Option gelernt, um einen Branch zu kopieren. Wir werden nun sehen, wie man mit dieser Methode einen Remote in einen neuen lokalen Zweig kopiert.

Kopieren Sie den entfernten Zweig in den lokalen Zweig in Git mit der Option --copy im Befehl git branch

Es handelt sich um ein zweistufiges Verfahren.

Zuerst checken wir den Remote-Zweig mit dem Befehl git checkout aus. Beachten Sie die Option --no-track.

git checkout <old_branch> --no-track

Als nächstes kopieren wir in einen neuen Zweig, indem wir das Flag -c (für --copy) an den Befehl git branch übergeben.

git branch -c <old_branch> <new_branch>

Git-Kopie mit Verzweigungsbefehl

Auch hier können Sie unten sehen, dass die neue Kopie den alten Zweig nicht verfolgt.

Git-Kopie mit Verzweigung ohne Tracking-Beziehung

Unterschied zwischen Git-Kopie und Klonen

Git copy ist nicht dasselbe wie Git clone. Es gibt ein paar feine Unterschiede.

  1. Wenn Sie einen Zweig kopieren, folgt der neue Zweig nicht dem alten Zweig. Das bedeutet, dass zwischen den beiden keine Verbindung besteht – der neue Zweig hat lediglich den Inhalt des alten Zweigs kopiert.

    Ein Klon verfolgt jedoch den alten Zweig. Das bedeutet, dass Sie diese Befehle in ihrer Vanilla-Form pushen, pullen, zusammenführen, rebasen und verwenden können, ohne explizite Argumente zu übergeben - die Tracking-Beziehung füllt die Zweignamen automatisch aus.

  2. In Git ist das Klonen auf Effizienz optimiert. Wenn Sie also klonen, erhält der neue Zweig nicht die Reflogs, Konfigurationen und Hooks des alten Zweigs.

    Eine Kopie kopiert all diese ebenfalls. Es ist in manchen Fällen lebenswichtig, z. B. wenn Sie versuchen, verlorene Commits mit Hilfe von reflog wiederherzustellen.

  3. Eine Git-Kopieroperation hat einige typische Anwendungsfälle – am häufigsten, um ein Backup eines Remote-Zweigs zu erstellen. Ein weiterer Anwendungsfall ist, wenn ein Entwickler einen interessanten Remote-Feature-Zweig herunterladen und erkunden möchte, ohne die Absicht zu haben, seine Änderungen in die Hauptcodebasis zu übertragen.