Wie funktioniert Git Reset eigentlich? Weiche, harte und gemischte Resets erklärt

git reset ist ein leistungsstarker Befehl, mit dem Sie den Verlauf Ihres Git-Repositorys ändern können und behebe Fehler, die du gemacht hast. Obwohl der Name es beängstigend erscheinen lässt, ist es eigentlich ziemlich einfach, also lassen Sie uns darüber sprechen, wie es funktioniert.

Was ist der Git HEAD?

Bevor wir verstehen, wie Resets funktionieren, müssen wir über den Git HEAD sprechen.

“HEAD” ist einfach ein Alias ​​für Ihren aktuellen Arbeits-Commit. Sie können es sich wie den Kopf eines Plattenspielers vorstellen, dessen Position bestimmt, welche Daten verwendet werden. Wenn Sie derzeit den Master-Branch verwenden, ist der HEAD der neueste Commit in diesem Branch.

Obwohl HEAD ein Alias ​​für einen Commit ist, zeigt er meistens nicht direkt auf einen Commit. Es zeigt auf einen Branch und verwendet automatisch den neuesten Commit. Es kann auch direkt auf einen Commit verweisen, was als “freistehender HEAD” obwohl das für git reset keine Rolle spielt.

Wie funktioniert Git Reset?

Der Commit-Verlauf von Git wird als Baum von Commits gespeichert und soll größtenteils unveränderlich sein. Manchmal ist es jedoch erforderlich, diesen Verlauf zu ändern, und hier kommt git reset ins Spiel.

Werbung

Jeder Commit verlinkt auf den vorherigen Commit und kann verzweigt werden in verschiedene Glieder, die schließlich wieder in den Master-Zweig zusammengeführt werden. In beiden Fällen zeigt der HEAD normalerweise auf den neuesten Commit in dem Branch, an dem Sie gerade arbeiten.

Was passiert also, wenn Sie einen Commit ausführen, den Sie rückgängig machen möchten?

Nun, das Ausführen von git reset verschiebt den HEAD im Grunde nach hinten und lässt alle Commits davor hängen. Dadurch wird der normalerweise unveränderliche Git-Verlauf neu geschrieben, um die Commits vor dem HEAD loszuwerden.

Dies kann aus vielen Gründen sehr nützlich sein. Vielleicht haben Sie einen Commit gemacht, dann einige zusätzliche Änderungen vorgenommen und wollten das Ganze als einen Commit pushen. Sie können den vorherigen Commit zurücksetzen und dann wieder korrekt festschreiben.

Oder vielleicht haben Sie versehentlich einen Commit gemacht, der einige Änderungen enthält, die Sie nicht verfolgen wollten. Dies kann sehr schwer herauszufinden sein, wenn Sie nicht wissen, wie git reset funktioniert, aber das Zurücksetzen des HEAD und dann nur das Bereitstellen der richtigen Änderungen wird dies erreichen. Beachten Sie, dass sich dies von git revert unterscheidet, das Commits umkehrt.

VERWANDTE: So stellen Sie zurückgesetzte Commits in einem Git-Repository wieder her

Es gibt drei verschiedene Arten von Resets in Git, die sich alle darin unterscheiden, wie sie mit Commits umgehen, die hängen bleiben. Sie alle schreiben den Git-Verlauf neu und sie alle verschieben den HEAD zurück, aber sie gehen mit den Änderungen anders um:

  • git reset –soft, das Ihre Dateien behält und alle Änderungen automatisch zurücksetzt .
  • git reset –hard, wodurch alle Änderungen vollständig zerstört und aus dem lokalen Verzeichnis entfernt werden. Verwenden Sie dies nur, wenn Sie wissen, was Sie tun.
  • git reset –mixed, was die Standardeinstellung ist und alle Dateien gleich hält, aber die Änderungen aufhebt. Dies ist die flexibelste Option, aber trotz des Namens werden Dateien nicht geändert.

Werbung

Der Unterschied zwischen weich und gemischt besteht darin, ob die Änderungen inszeniert sind oder nicht. Staged ist im Grunde eine Zwischenzone zwischen dem lokalen Verzeichnis und dem Git-Verlauf. git fügt Stages-Dateien hinzu und git commit schreibt sie in den Verlauf. In beiden Fällen ist das lokale Verzeichnis nicht betroffen, es ändert lediglich den Status der Nachverfolgung dieser Änderungen durch Git.

Grundsätzlich sind Soft- und Mixed-Resets größtenteils gleich und ermöglichen es Ihnen, die Änderungen beizubehalten, und Hard-Resets setzen Ihr lokales Verzeichnis vollständig auf den ursprünglichen Stand zurück des Commits.

Verwenden von Git Reset

Sobald Sie verstanden haben, was vor sich geht, ist die Verwendung von git reset wirklich unglaublich einfach. Zum Zurücksetzen benötigen Sie einen Verweis auf den Commit, zu dem Sie zurückkehren möchten. Sie können dies erhalten, indem Sie reflog ausführen:

git reflog

Copy den siebenstelligen Code rechts. Wenn Sie gerade in vim stecken geblieben sind, drücken Sie Q und führen Sie vielleicht git config –global core.editor “nano” aus.

Dann können Sie auf den Ziel-Commit zurücksetzen:

git reset –mixed a560612

Oder Sie können Commits basierend auf ihrer Position relativ zum HEAD anvisieren. Der folgende Befehl zielt auf den Commit direkt vor dem HEAD ab, was eine nützliche Kurzform ist, wenn Sie den letzten Commit zurücksetzen müssen:

git reset –mixed HEAD~

Wenn Sie einen Git-Client wie Fork verwenden , das Zurücksetzen ist so einfach wie ein Rechtsklick auf den Ziel-Commit und die Auswahl von “Zurücksetzen”:

Sollten Sie jemals einen Hard Reset durchführen?

Sie sollten wirklich nur weiche oder gemischte Resets verwenden, aber wenn Sie haben Ihr Repository so durcheinander gebracht, dass Sie es vollständig zurücksetzen müssen, können Sie die folgende Befehlsfolge verwenden, um es vollständig auf den Normalzustand zurückzusetzen.

git fetch origin git checkout master git reset –hard origin/master git clean -d –force Advertisement

Natürlich können Sie jederzeit den klassischen “löschen Sie Ihr Repository und erneut von Github klonen” aber dieser Weg ist zumindest von Git genehmigt und setzt nur einen einzelnen Branch zurück.


Posted

in

by

Tags: