So setzen Sie ein Git-Repository vollständig zurück (einschließlich nicht verfolgter Dateien)

0
253

Git-Befehle sind kompliziert und Sie denken oft:“Verdammt, ich 8217;Ich fange einfach von vorne an!” Glücklicherweise ist Git darauf ausgelegt, jede Version Ihrer Änderungen zu verfolgen, und wenn Sie es vermasselt haben, bietet es Tools zum Zurücksetzen Ihres Repositorys in den alten Arbeitszustand.

Speichern Ihrer Änderungen (Git Stash)

Bevor Sie einen Befehl zum Zurücksetzen Ihres Repositorys ausführen, sollten Sie sicherstellen, dass keine Daten verloren gehen, die Sie speichern möchten.

Git bietet verschiedene Arten von Resets. Weiche und gemischte Zurücksetzungen setzen das Repository auf den Zustand zurück, in dem es sich bei einem bestimmten Commit befand (oft der HEAD eines Zweigs), aber Ihre lokalen Änderungen, die Sie noch nicht festgeschrieben haben, werden beibehalten. Hard-Resets hingegen sind destruktiv und verwerfen Änderungen, die noch nicht festgeschrieben wurden.

Oft ist ein Hard-Reset erforderlich, um das Repository richtig zu bereinigen. Wenn Sie möchten, können Sie jedoch “verstauen” Ihre Änderungen, die alle nicht festgeschriebenen Änderungen übernehmen und lokal speichern. Sie können den Stash mit “Stash Apply” zu einem späteren Zeitpunkt.

git stash git stash anwenden

Sie können auch einen neuen Branch erstellen, die Änderungen festschreiben und dann auf den Master zurücksetzen. Dadurch würden Ihre Änderungen für immer im Commit-Verlauf gespeichert und könnten auch an die Remote-Quellcodeverwaltung gesendet werden, um sie mit Ihren Kollegen zu teilen.

Reset durchführen ( Git Reset)

Zuerst müssen Sie den neuesten Status des Remote-Repository abrufen, normalerweise “Ursprung,” und checken Sie dann den Master-Zweig aus (oder den, auf den Sie zurücksetzen).

git fetch origin git checkout master Werbung

Sie können auch einen einzelnen Commit mit seiner ID auschecken und auf ihn zurücksetzen, z. B. git checkout 342c47a4.

Führen Sie dann einen Hard-Reset durch (es sei denn, Sie möchten die Änderungen mit einem Soft-Reset beibehalten). Denken Sie daran, dass dieser Vorgang destruktiv für alle nicht gespeicherten Änderungen ist.

git reset –hard origin/master

Sie können auf einen lokalen Commit anstelle von origin/master zurücksetzen, aber die meisten die Zeit, zu der Sie auf den Status der Fernbedienung zurücksetzen.

Nicht verfolgte Dateien zurücksetzen (Git Clean)

Allerdings reicht git reset in der Regel nicht aus. Beim Zurücksetzen in Git werden nur Dateien zurückgesetzt, die tatsächlich von Git verfolgt werden. Dazu gehören Code und Ressourcen, die Änderungen erhalten.

Es gibt jedoch auch Dateien wie Pakete, lokale Konfigurationen, Build-Artefakte/Ausgaben, Protokolldateien und andere vorübergehende Elemente, die nicht in Git . gespeichert werden Repository (und in .gitignore ignoriert). Um diese zu bereinigen und Ihr lokales Repository auf 100% Parität mit dem Zustand der Fernbedienung zu bringen, können Sie git clean ausführen:

git clean -d –force Advertisement

Sie können diesen Befehl tatsächlich ausführen, ohne git reset auszuführen, was möglicherweise genau das ist, was Sie möchten. Wenn Sie Ihre Codedateien nicht beeinflussen möchten, aber Ihre Builds, Logs und Pakete bereinigen möchten, um von vorne zu beginnen, ist git clean möglicherweise alles, was Sie brauchen.

Stattdessen aufgeben: Ein neues Repo klonen

Obwohl das obige der “saubere Weg” Um dies mit offiziellen Git-Befehlen zu tun, ist ein vollständiger Reset nicht weit davon entfernt, einfach Ihren lokalen Repository-Ordner zu zerstören und einen brandneuen zu klonen. Es ist keine Schande, dies zu tun, wenn Sie sowieso vorhaben, alles zurückzusetzen:

sudo rm -r git-repository git clone https://github.com/user/git-repository.git cd git-repository

Denken Sie daran, dass dies nur auf den Status Ihres Remote-Repository zurückgesetzt werden kann, nicht auf einen lokalen Commit. Dadurch wird der Master-Branch standardmäßig geklont, aber Sie können mit git switch zum Branch Ihrer Wahl wechseln oder ihn mit git clone -b <branchname> von Anfang an klonen.