So entfernen Sie den alten Git-Verlauf vor einem Commit

Bei der Arbeit mit der Git-Versionskontrolle ist es oft notwendig, den Commit-Verlauf manuell zu ändern, obwohl er unveränderlich sein soll. Mit ein paar Befehlen können Sie neu beginnen und den gesamten Git-Verlauf vor einem bestimmten Punkt löschen.

Warum alte Git-Commits entfernen?

Bei der Arbeit mit Git-Repositorys kann es manchmal erforderlich sein, den gesamten Git-Verlauf vor einem bestimmten Commit zu entfernen. Dies ist normalerweise nützlich, wenn Sie mit einer neuen Geschichte neu beginnen möchten. Der gesamte Code bleibt gleich, aber die Aufzeichnung aller Änderungen kann problemlos gelöscht werden.

Angenommen, Sie haben ein wirklich tolles Website-Projekt, bei dem alle Grundbausteine ​​bereits eingerichtet sind, und Sie möchten eine weitere Website erstellen. Sie können von vorne beginnen oder die erste Website als Vorlage verwenden, indem Sie sie klonen, alle nicht benötigten Seiten und Codes entfernen und sie dann erneut in ein neues Repository übertragen. Dies würde jedoch zu einem unübersichtlichen Commit-Verlauf mit allen Änderungen vor dem Klonen führen. Dies ist nützlich für Forks von Repositorys, kann aber in diesem Fall entfernt werden.

Das Entfernen alter Commits kann auch nützlich sein, wenn Sie vertrauliche Daten entfernen möchten, die möglicherweise versehentlich festgeschrieben wurden. Da der Git-Verlauf normalerweise unveränderlich ist, können Sie Geheimnisse oder Token, die in den Commit-Protokollen gelandet sind, nicht vollständig entfernen, indem Sie den Commit rückgängig machen. Sie müssen ihn vollständig löschen.

Es ist wichtig zu beachten, dass jede Änderung des Git-Verlaufs in irgendeiner Weise zu Problemen führen kann, wenn andere Teammitglieder am Ende ein veraltetes Repository haben. Der Git-Verlauf soll unveränderlich sein – Commits werden nur hinzugefügt, niemals subtrahiert. Wenn Sie einen Commit aus einem gemeinsam genutzten GitHub-Repository entfernen möchten, müssen Sie dies entweder tun, bevor die Commits gepusht werden, oder „Push erzwingen“; um den Repository-Inhalt zu überschreiben. Wenn Sie Push erzwingen, müssen Sie alle Ihre Mitarbeiter anweisen, das Repository erneut zu klonen.

Alle Commits vor einem Commit entfernen

< p>Der erste Schritt besteht darin, einen Verweis auf die Commit-ID zu erhalten, auf die Sie abzielen möchten. Das geht ganz einfach mit einer GUI-Anwendung oder über die GitHub-Website, wo Sie das Commit-Log direkt einsehen können. Andernfalls können Sie den Befehl „git log“ verwenden, um eine Liste der Commits anzuzeigen.

git log

< p>Als nächstes können wir git checkout mit dem speziellen Flag –orphan verwenden, das vor dem angegebenen Commit keinen Versionsverlauf auscheckt. Angenommen, wir möchten nach dem „Wechsel zu .NET 6“ eine Kopie des Repositorys erstellen. Wir könnten die SHA1-ID dieses Commits kopieren und Folgendes ausführen:

git checkout –orphan orphan-branch ee96691d2785da4bbbbb058382d41e0ccf2a7e7b

Dadurch verbleibt das Repository in einem Zustand, in dem der ausgecheckte HEAD auf keine Commits verweist, was tatsächlich zu Fehlern bei Git-GUI-Clients wie GitKraken führen kann, wie hier gezeigt. Sie müssen alle Dateien bereitstellen und den Neuanfang erneut festschreiben:

git add -A git commit -m „Abgeschnittener Verlauf“

Dadurch erhalten Sie einen neuen „verwaisten Zweig“; ohne Verweise auf Commits vor dem abgeschnittenen Verlauf.

Es gibt jedoch auch keine Verweise auf Commits nach dem abgeschnittenen Verlauf, und der Master-Zweig zeigt immer noch auf den falschen Speicherort. Um diese wiederherzustellen, müssen wir den Master-Zweig auf den Waisenzweig umbasieren. Dadurch werden im Wesentlichen alle Commits nach dem Ziel vom Master abgeschnitten, sie auf den verwaisten Zweig gezogen und dann der „Master“-Zweig aktualisiert. Verzweigungsbezeichnung, um auf diesen neuen Speicherort zu verweisen.

Verwenden Sie unter Verwendung derselben Commit-ID wie zuvor den folgenden Befehl, um das Rebase durchzuführen:

git rebase –onto orphan-branch ee96691d2785da4bbbbb058382d41e0ccf2a7e7b master

Jetzt sollten Sie einen ordnungsgemäßen Commit-Verlauf haben, in dem der Master-Zweig keine alten Commits referenziert. Wenn Sie mit einer Fernbedienung verbunden sind, wird der „Remote-Master“ angezeigt. Der Branch zeigt möglicherweise immer noch die alten Commits an, aber diese verschwinden, sobald Sie Push erzwingen.

Als letztes müssen Sie die alten Daten löschen, den temporären verwaisten Zweig entfernen und mit Git aufräumen:

git branch -D orphan-branch git prune –progress git gc –aggressive

Sobald das& #8217;s fertig, das Einzige, was noch zu tun ist, ist, eine Fernbedienung hinzuzufügen und in das neue GitHub-Repository zu pushen. Wenn Sie jedoch den Verlauf in einem vorhandenen Repository kürzen, müssen Sie Push erzwingen, um den Verlauf zu überschreiben:

git push –force

Und das ist alles. Sie haben Ihren Verlauf aufgeräumt, um die Dinge ordentlich und organisiert zu halten.

WEITER LESEN

  • › Holen Sie sich die individuellen Denary-Würfel von Curiosity Box in der Autumn Box
  • › Googles NotebookLM verändert das Notizenmachen
  • › Microsoft 365-Apps erhalten eine neue Standardschriftart
  • › So blenden Sie Songs auf Spotify ein und aus
  • › So beheben Sie „Der Wiederherstellungsserver konnte nicht kontaktiert werden“ Mac-Fehler
  • › Windows 11 verabschiedet sich von alten ARM-Apps

Posted

in

by

Tags: