So entfernen Sie einen Commit von Github

0
59

Wenn Sie aus Versehen etwas begangen haben, was Sie nicht hätten tun sollen, und geschoben haben es zu Github, es gibt immer noch Möglichkeiten, es zu löschen oder zu ändern. Normalerweise möchten Sie sich nicht mit dem Verlauf von Git herumschlagen, aber in einigen Fällen kann es sicher sein, wenn es richtig gemacht wird.

Tun Sie dies nicht, wenn Sie es vermeiden können

Das Entfernen von Commits aus dem Verlauf von Git ist im Allgemeinen eine schlechte Idee. Git soll jede Version Ihrer Dateien verfolgen, und es gibt immer Alternativen zum Löschen, wie git revert, die den Verlauf intakt halten.

Sobald es sich in einem Remote-Repository befindet , wie bei Github, ist es viel schwieriger, den Commit vollständig loszuwerden. Dies liegt daran, dass alle anderen Benutzer des Repositorys über eine eigene lokale Kopie dieses Repositorys verfügen und das gewaltsame Löschen eines Commits dazu führt, dass sie nicht mehr synchron sind.

Es gibt immer noch einige Gründe, dies zu tun, obwohl Sie möglicherweise versehentlich private Daten in ein öffentliches Repository übernommen haben, die unabhängig von Ihrer Vorgehensweise im Verlauf sichtbar wären. Dies wird Ihren Mitarbeitern einige Probleme bereiten, aber selbst in diesem Fall ist es mit einem Force Push möglich.

Commits lokal beheben

Wenn Sie lokal arbeiten und Ihre Änderungen noch nicht auf Github übertragen haben, können Sie Commits, die sich nicht auf der Fernbedienung befinden, sicher zurücksetzen oder ändern. Git verfolgt Ihr lokales Verzeichnis, stellt Änderungen intern bereit und führt einen Git-Verlauf. Dies wird alles synchron mit der Fernbedienung gehalten, aber nur, wenn Push/Pull ausgeführt wird. Github kümmert sich nicht um den Status Ihres Repositorys, bis Sie pushen.

< /p> Werbung

Wenn Sie beim Übertragen von Dateien nur einen Fehler gemacht haben, können Sie einen Soft-Reset durchführen und einen neuen Commit durchführen. Dies ist eigentlich üblich und nützlich, wenn Sie mehrere Commits zu einem zusammenführen möchten, was als “Squashing” Wenn Sie die Änderungen vollständig verwerfen möchten, können Sie dies auch tun (mit einem –hard reset).

Wenn Sie noch nicht auf Github gepusht haben, können Sie den letzten Commit mit einem Soft-Reset wiederherstellen, was Ihre lokalen Dateien überhaupt nicht beeinflusst, aber dafür sorgt, dass Sie die Änderungen nie an Git in übertragen haben an erster Stelle.

git reset –soft HEAD~

Wenn Sie nur eine neue Datei/Änderung zum letzten Commit hinzufügen möchten, hat Git ein Flag eingebaut, um genau das zu tun:

git commit –amend –no-edit

Reverting (Github Safe)

Wenn Sie die Änderungen eines bereits an Github übertragenen Commits rückgängig machen möchten, können Sie dies sicher mit einem Zurücksetzen tun. Beim Zurücksetzen wird ein “Gegen-Commit” was im Grunde alle Änderungen von einem bestimmten Commit rückgängig macht. Wenn Sie eine Zeile hinzugefügt haben, wird sie entfernt, und wenn Sie eine Datei gelöscht haben, wird sie wieder hinzugefügt.

Dies ist sicher, da es nicht nur den Verlauf ändert fügt eine neue Geschichte hinzu. Sie können den Revert-Commit an Github senden und Ihre Kollegen git pull ausführen lassen, um die Updates zu erhalten.

Führen Sie zuerst git log aus, um eine Liste der Commits abzurufen:

Kopiere dann den SHA1-Hash und mache den Commit rückgängig:

git revert 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0f

Zurücksetzen erzwingen (unsicher)

Wenn du es wirklich willst Um einen Commit zu entfernen, müssen Sie ihn lokal entfernen und dann den Push an Github erzwingen. Da dies sehr gefährlich istund können die lokalen Repositorys Ihres Kollegen durcheinander bringen. Wenn Sie es dennoch möchten, müssen Sie möglicherweise den Push-Branch-Schutz in den Repository-Einstellungen von Github deaktivieren:

Werbung

Dann können Sie den Commit lokal entfernen, was am einfachsten ist, wenn es der neueste ist commit:

git reset –soft HEAD~

Sie können auch ein interaktives Rebase durchführen, was nützlich ist, wenn der Commit nicht der neueste ist. Wenn der Commit zum Beispiel 12 Commits zurückliegt, können Sie von da an ein Rebase durchführen, den anstößigen Commit entfernen und speichern.

git rebase -i HEAD~12

Sobald Ihr lokales Repository in Ordnung ist, können Sie kann Push an Github erzwingen.

git push origin master –force

Stellen Sie sicher, dass Ihr Repository auf dem neuesten Stand ist! Wenn der Remote-Zweig Änderungen enthält, die Sie nicht haben, sie werden durch diesen Push überschrieben.

Sie sollten dies mit Ihren Teammitgliedern abstimmen, da Sie sie möglicherweise anpingen und ihnen sagen müssen, dass sie einen Abruf durchführen und zurücksetzen sollen:

git fetch git reset origin/master –soft

Verschieben eines Commits in einen anderen Branch

Wenn Sie versehentlich einen Commit in den falschen Branch eingegeben haben und den Commit und verschieben Sie es in den richtigen Branch, es gibt Tools in Git, um das zu handhaben. Sie können unseren Leitfaden zum Verschieben von Commits lesen, um mehr zu erfahren, aber es gelten die gleichen Prinzipien: Wenn Sie einen Commit vollständig entfernen müssen, müssen Sie einen Reset erzwingen. Wenn Sie mit dem Zurücksetzen einverstanden sind, können Sie einfach zurücksetzen und die Rosinen auswählen.