Git-Tipps: Reset, Checkout und Revert für Fortgeschrittene (Teil 2)

Die Git-Befehle git reset, git checkout und git revert kann man leicht durcheinanderbringen. Diese Tutorial-Reihe soll helfen, sie voneinander abzugrenzen und Git-Entwickler in die Lage zu versetzen, immer das richtige Kommando für eine spezifische Entwicklungsaufgabe zur Hand zu haben. Nachdem wir uns im ersten Teil git reset näher angesehen haben, widmen wir uns nun dem Auschecken und dem Reverting.

Checkout

Nach unserem früheren Tutorial zu get checkout sind wir bereits vertraut mit der Nutzung dieses Befehls auf Commit-Ebene. Wenn wir ihn mit einem Branch-Namen ausführen, können wir zwischen Branches hin und her wechseln.

git checkout hotfix

Intern geschieht dabei nichts weiter, als dass HEAD zu einem anderen Branch bewegt und das Arbeitsverzeichnis in Übereinstimmung gebracht wird. Da diese Operation potenziell lokale Änderungen überschreiben kann, zwingt uns Git dazu, alle Änderungen zu committen oder im Arbeitsverzeichnis zu verstecken, da sie bei der checkout-Operation verlorengehen. Anders als git reset bewegt git checkout keine Branches umher.

Git Before Checkout

Vor dem Auschecken

Git After Checkout

Nach dem Auschecken

Wir können beliebige Commits auch auschecken, indem wir die Commit-Referenz nutzen statt einen Branch. Es geschieht exakt dasselbe wie beim Auschecken eines Branchs: Die HEAD-Referenz wird zu dem spezifischen Commit bewegt. Der folgende Befehl checkt zum Beispiel ein Großelter des aktuellen Commits aus:

git checkout HEAD~2

Git Moving HEAD

Das ist hilfreich, wenn wir eine alte Version unseres Projekts schnell inspizieren wollen. Da es allerdings keine Branch-Referenz zum aktuellen HEAD gibt, finden wir uns in einem abgetrennten HEAD-Status wieder. Das kann gefährlich werden, wenn wir beginnen, neue Commits hinzuzufügen, denn es gibt keine Möglichkeit, zu ihnen zurückzukehren, wenn wir zu einem anderen Branch wechseln. Aus diesem Grund sollten wir immer erst einen neuen Branch erstellen, ehe wir Commits zu einem abgetrennten HEAD hinzufügen.

Revert

Mit git revert machen wir einen Commit rückgängig, indem ein neuer Commit erstellt wird. Das ist ein sicherer Weg, Änderungen zurückzunehmen, weil keine Commit-Historie neu geschrieben wird. Im folgenden Beispiel ermitteln wir, welche Änderungen der vorletzte Commit enthält, erstellen einen neuen Commit, der diese Änderungen rückgängig macht, und heften den neuen Commit an ein bestehendes Projekt an:

git checkout hotfix
git revert HEAD~2

Das können wir wie folgt visualisieren:

Git Before Reverting

Vor dem Reverting

Git After Reverting

Nach dem Reverting

git reset modifiziert im Gegensatz dazu die bestehende Commit-Historie. Deshalb sollten wir git revert einsetzen, wenn wir Änderungen an einem öffentlichen Branch zurücknehmen möchten; git reset heben wir uns dafür auf, wenn wir Änderungen in einem privaten Branch rückgängig machen wollen.

Am besten verstehen wir git revert als Werkzeug, committete Änderung zu widerrufen, und git reset als Weg, nicht committete Änderungen zu verwerfen.

Wie git checkout hat auch git revert das Potenzial, Dateien im Arbeitsverzeichnis zu überschreiben. Daher wird uns Git auffordern, Änderungen zu committen oder zu verstecken, die während der revert-Operation verlorengehen würden.

Im dritten Teil dieses Tutorials sehen wir uns dann an, wie git reset und git checkout auf Dateiebene genutzt werden können.

Git und Stash effektiv und produktiv nutzen? Wir sind Ihr Partner!

Kennen Sie Stash, Atlassians Git-Repository-Managementsystem? Stash bietet eine zentrale Lösung zum Management des gesamten distributierten Codes: Hier kommen alle Git-Repositories im Unternehmen zusammen, hier finden Entwickler immer die letzte offizielle Version eines Projekts, hier können Projektverantwortliche Berechtigungen kontrollieren, um sicherzustellen, dass die richtigen Nutzer Zugriff auf den richtigen Code haben. Möchten Sie mehr erfahren? Wir sind offizieller Vertriebspartner von Atlassian und einer der größten Atlassian Experts Partner weltweit. Gerne unterstützen wir Sie bei der Evaluierung, Lizenzierung und Adaption von Stash.

Übrigens: //SEIBERT/MEDIA bietet auch professionelle Grundlagen- und Aufbau-Workshops zu Git und Atlassian Stash an.

Weiterführende Infos

99 Argumente für Stash als Git-Repository-Manager
Branch-basierte Git-Workflows mit Stash adaptieren
Echte Integration: Das Zusammenspiel von JIRA, Stash und Bamboo
Interview: Die Vorteile von Git in der Software-Entwicklung und die Möglichkeiten von Stash
So funktioniert die Lizenzierung von Atlassian-Produkten