Git Switch vs. Git Checkout

GitGitBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie die wichtigsten Unterschiede zwischen den Befehlen git switch und git checkout kennen. Sie werden untersuchen, wann und warum Sie jeden Befehl verwenden sollten, zusammen mit praktischen Beispielen und Anwendungsfällen, die Ihnen helfen, Ihren Git-Workflow zu optimieren.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/status("Check Status") git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/checkout("Switch Branches") subgraph Lab Skills git/status -.-> lab-391555{{"Git Switch vs. Git Checkout"}} git/branch -.-> lab-391555{{"Git Switch vs. Git Checkout"}} git/checkout -.-> lab-391555{{"Git Switch vs. Git Checkout"}} end

Git Checkout verstehen

Der Befehl git checkout ist ein grundlegender Git-Befehl, der zum Wechseln von Branches (Zweigen) oder zum Wiederherstellen von Dateien im Arbeitsverzeichnis (working tree) verwendet wird. Er aktualisiert die Dateien in Ihrem Arbeitsverzeichnis, sodass sie mit der Version im angegebenen Branch oder Commit übereinstimmen.

Beginnen wir damit, zu untersuchen, wie Sie git checkout verwenden, um zwischen Branches zu wechseln.

Stellen Sie zunächst sicher, dass Sie sich im Projektverzeichnis befinden:

cd ~/project

Überprüfen wir nun den aktuellen Branch. Standardmäßig befinden Sie sich nach git init im main- oder master-Branch (abhängig von Ihrer Git-Konfiguration). In diesem Lab-Setup haben wir einen feature-branch erstellt.

git branch

Sie sollten eine ähnliche Ausgabe wie diese sehen, die den aktuellen Branch mit einem Sternchen anzeigt:

  feature-branch
* main

Verwenden Sie nun git checkout, um zum feature-branch zu wechseln:

git checkout feature-branch

Sie sehen eine Ausgabe, die den Wechsel bestätigt:

Switched to branch 'feature-branch'

Lassen Sie uns den aktuellen Branch noch einmal überprüfen:

git branch

Die Ausgabe sollte nun zeigen, dass Sie sich im feature-branch befinden:

* feature-branch
  main

Sie haben git checkout erfolgreich verwendet, um Branches zu wechseln.

Git Switch verstehen

Der Befehl git switch ist ein neuerer Befehl, der in Git 2.23 eingeführt wurde und speziell für das Wechseln von Branches (Zweigen) entwickelt wurde. Er zielt darauf ab, im Vergleich zum überladenen Befehl git checkout eine klarere Trennung der Zuständigkeiten (separation of concerns) zu bieten.

Verwenden wir git switch, um zurück zum main-Branch zu wechseln.

Stellen Sie sicher, dass Sie sich im Projektverzeichnis befinden:

cd ~/project

Verwenden Sie nun git switch, um zum main-Branch zu wechseln:

git switch main

Sie sehen eine Ausgabe, die den Wechsel bestätigt:

Switched to branch 'main'

Lassen Sie uns den aktuellen Branch noch einmal überprüfen:

git branch

Die Ausgabe sollte nun zeigen, dass Sie sich auf main befinden:

* main
  feature-branch

Sie haben git switch erfolgreich verwendet, um Branches zu wechseln. Beachten Sie, dass die Ausgabe ähnlich wie bei git checkout ist, wenn Sie Branches wechseln.

Erstellen und Wechseln von Branches mit Git Switch

Eine der praktischen Funktionen von git switch ist die Möglichkeit, einen neuen Branch zu erstellen und mit einem einzigen Befehl mit der Option -c (oder --create) zu diesem zu wechseln.

Erstellen wir einen neuen Branch namens development und wechseln wir zu diesem.

Stellen Sie sicher, dass Sie sich im Projektverzeichnis befinden:

cd ~/project

Verwenden Sie nun git switch -c, um den development-Branch zu erstellen und zu diesem zu wechseln:

git switch -c development

Sie sehen eine Ausgabe, die anzeigt, dass ein neuer Branch erstellt wurde und Sie zu diesem gewechselt sind:

Switched to a new branch 'development'

Lassen Sie uns den aktuellen Branch überprüfen und alle Branches auflisten:

git branch

Die Ausgabe sollte den neuen development-Branch anzeigen und angeben, dass Sie sich gerade auf diesem befinden:

  feature-branch
  main
* development

Dies zeigt, wie git switch -c den Prozess des Erstellens und sofortigen Arbeitens an einem neuen Branch vereinfacht.

Wiederherstellen von Dateien mit Git Checkout

Während git switch hauptsächlich zum Wechseln von Branches dient, behält git checkout die Funktionalität zum Wiederherstellen von Dateien bei. Dies ist ein wesentlicher Unterschied in ihrer beabsichtigten Verwendung.

Nehmen wir eine Änderung an file1.txt vor und verwenden dann git checkout, um die Änderungen zu verwerfen und die Datei in ihren Zustand im aktuellen Branch (development) wiederherzustellen.

Stellen Sie sicher, dass Sie sich im Projektverzeichnis befinden:

cd ~/project

Fügen Sie file1.txt etwas Inhalt hinzu:

echo "Additional content" >> file1.txt

Überprüfen Sie den Status der Datei:

git status

Die Ausgabe zeigt, dass file1.txt geändert wurde:

On branch development
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   file1.txt

no changes added to commit (use "git add" and/or "git commit -a")

Verwenden Sie nun git checkout --, um die lokalen Änderungen an file1.txt zu verwerfen:

git checkout -- file1.txt

Überprüfen Sie den Status erneut:

git status

Die Ausgabe sollte nun zeigen, dass es keine Änderungen im Arbeitsverzeichnis (working directory) gibt:

On branch development
nothing to commit, working tree clean

Die Änderungen, die Sie an file1.txt vorgenommen haben, wurden verworfen, und die Datei wurde in ihren Zustand im development-Branch wiederhergestellt. Diese Funktionalität wird von git checkout und nicht von git switch übernommen.

Auschecken eines bestimmten Commits mit Git Checkout

Eine weitere Funktionalität, die von git checkout beibehalten wird, ist die Möglichkeit, einen bestimmten Commit auszuchecken. Dies versetzt Sie in einen "detached HEAD"-Zustand (abgelöster HEAD-Zustand), der es Ihnen ermöglicht, das Projekt zu diesem Zeitpunkt in der Historie zu inspizieren. git switch verfügt nicht über diese Fähigkeit.

Finden wir zunächst den Commit-Hash des ersten Commits.

Stellen Sie sicher, dass Sie sich im Projektverzeichnis befinden:

cd ~/project

Zeigen Sie den Commit-Verlauf an:

git log --oneline

Sie sehen eine ähnliche Ausgabe wie diese, mit den Commit-Hashes:

<commit_hash_development> (HEAD -> development) Initial commit
<commit_hash_main> (main, feature-branch) Initial commit

Beachten Sie, dass die Commit-Hashes in Ihrer Umgebung unterschiedlich sein werden. Kopieren Sie den Commit-Hash für den "Initial commit".

Verwenden Sie nun git checkout, gefolgt vom Commit-Hash, um diesen bestimmten Commit auszuchecken. Ersetzen Sie <commit_hash> durch den tatsächlichen Hash, den Sie kopiert haben.

git checkout <commit_hash>

Sie sehen eine Ausgabe, die anzeigt, dass Sie sich in einem detached HEAD-Zustand befinden:

Note: switching to '<commit_hash>'

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

HEAD is now at <commit_hash> Initial commit

Sie betrachten das Projekt nun so, wie es zum Zeitpunkt des ersten Commits war. Um zu einem Branch zurückzukehren, können Sie git switch oder git checkout verwenden, um zu einem Branch wie development oder main zurückzukehren.

Wechseln wir mit git switch zurück zum development-Branch:

git switch development

Sie sehen eine Ausgabe, die den Wechsel bestätigt:

Switched to branch 'development'

Sie haben git checkout erfolgreich verwendet, um einen bestimmten Commit zu erkunden, und sind dann mit git switch zu einem Branch zurückgekehrt.

Zusammenfassung der Unterschiede

Um die wichtigsten Unterschiede zwischen git checkout und git switch zusammenzufassen:

  • git switch: Wird hauptsächlich zum Wechseln zwischen Branches verwendet. Es ist ein neuerer, fokussierterer Befehl für diese spezielle Aufgabe. Es kann auch einen neuen Branch erstellen und zu diesem wechseln (git switch -c).
  • git checkout: Ein vielseitigerer Befehl, der Branches wechseln kann, aber auch die Möglichkeit hat, bestimmte Commits auszuchecken (was zu einem detached HEAD (abgelöster HEAD) führt) und Dateien wiederherzustellen (git checkout -- <file>).

Während git checkout das Wechseln von Branches durchführen kann, ist git switch der empfohlene Befehl für diesen Zweck in neueren Git-Versionen, da er eine klarere Absicht und Trennung der Zuständigkeiten (separation of concerns) bietet. Verwenden Sie git checkout, wenn Sie Dateien wiederherstellen oder bestimmte Commits erkunden müssen.

Sie haben nun die Kernfunktionen von git checkout und git switch kennengelernt und verstehen, wann Sie welchen Befehl in Ihrem Git-Workflow verwenden sollten.

Zusammenfassung

In diesem Lab haben Sie die Unterschiede zwischen den Befehlen git switch und git checkout kennengelernt. Sie haben das Wechseln von Branches mit beiden Befehlen geübt, einen neuen Branch mit git switch erstellt, Dateien mit git checkout wiederhergestellt und einen bestimmten Commit mit git checkout ausgecheckt. Sie verstehen nun die beabsichtigten Anwendungsfälle für jeden Befehl und wie sie zu einem effizienten Git-Workflow beitragen.