Frage Lösche Commits von einem Zweig in Git


Ich würde gerne wissen, wie man ein Commit löscht.

Durch deleteIch meine, es ist so, als ob ich das nicht gemacht hätte, und wenn ich in der Zukunft einen Push mache, werden meine Änderungen nicht in den entfernten Zweig übertragen.

Ich lese Git Hilfe, und ich denke, der Befehl, den ich verwenden sollte, ist git reset --hard HEAD. Ist das richtig?


2574
2017-08-27 03:39


Ursprung


Antworten:


Vorsichtig:  git reset --hard  LÖSCHEN IHRE ARBEITSVERZEICHNIS-ÄNDERUNGEN. Sicher sein zu Speichern Sie alle lokalen Änderungen, die Sie behalten möchten bevor Sie diesen Befehl ausführen.

Vorausgesetzt, Sie sitzen auf diesem Commit, dann wird dieser Befehl es wackeln ...

git reset --hard HEAD~1

Das HEAD~1 bedeutet das Commit vor dem Kopf.

Oder Sie könnten den Ausgang von anschauen git log, suchen Sie die Commit-ID des Commits, mit dem Sie sichern möchten, und führen Sie dann Folgendes aus:

git reset --hard <sha1-commit-id>

Wenn Sie es bereits gedrückt haben, müssen Sie einen Kraftschub machen, um es loszuwerden ...

git push origin HEAD --force

jedochWenn andere es gezogen haben, wäre es besser, einen neuen Zweig zu beginnen. Denn wenn sie ziehen, wird es einfach in ihre Arbeit einfließen, und Sie werden es wieder hochschieben.

Wenn Sie bereits gedrängt haben, ist es möglicherweise besser zu verwenden git revert, um ein "Spiegelbild" -Commit zu erstellen, das die Änderungen rückgängig macht. Beide Commits werden jedoch im Protokoll gespeichert.


FYI - git reset --hard HEAD ist großartig, wenn Sie WORK IN PROGRESS loswerden wollen. Es wird Sie zurück auf den letzten Commit zurücksetzen und alle Änderungen in Ihrem Arbeitsbaum und Index löschen.


Schließlich, wenn Sie ein Commit finden müssen, das Sie "gelöscht" haben, ist es normalerweise in vorhanden git reflog es sei denn, Sie haben Müll gesammelt Ihr Repository.


3305
2017-08-27 03:44



Wenn Sie das Commit noch nirgends verschoben haben, können Sie es verwenden git rebase -i um dieses Commit zu entfernen. Finden Sie zunächst heraus, wie weit dieses Commit (ungefähr) zurückliegt. Dann mach:

git rebase -i HEAD~N

Das ~N bedeutet Rebase die letzte N verpflichtet (N muss zum Beispiel eine Nummer sein HEAD~10). Anschließend können Sie die Datei bearbeiten, die Git Ihnen zur Verfügung stellt, um die fehlerhafte Übertragung zu löschen. Beim Speichern dieser Datei schreibt Git alle folgenden Commits so um, als ob der von Ihnen gelöschte nicht existiert.

Das Git Buch hat eine gute Abschnitt über Rebasing mit Bildern und Beispielen.

Sei vorsichtig damit, denn wenn du etwas änderst, was du tust haben woanders hingedrängt, wird ein anderer Ansatz benötigt, es sei denn, Sie planen einen forcierten Push.


603
2017-08-27 03:51



Eine andere Möglichkeit ist einer meiner persönlichen Lieblingsbefehle:

git rebase -i <commit>~1

Dies startet den Rebase im interaktiven Modus -i an dem Punkt kurz vor dem Festschreiben willst du dich verpfeifen. Der Editor wird nun alle Commits auflisten. Löschen Sie die Zeile mit dem Commit, das Sie löschen möchten, und speichern Sie die Datei. Rebase erledigt den Rest der Arbeit, löscht nur dieses Commit und spielt alle anderen wieder im Log ab.


416
2017-08-27 03:49



Ich füge diese Antwort an, weil ich nicht verstehe, warum jemand, der gerade versucht hat, Arbeit zu verrichten, all diese Arbeit wegen eines Fehlers mit Git löschen möchte!

Wenn Sie Ihre Arbeit behalten und diesen Commit-Befehl einfach 'rückgängig machen' wollen (Sie haben ihn erwischt, bevor Sie zum Repo-System gedrängt haben):

git reset --soft HEAD~1

Verwenden Sie nicht die --hard Flag, es sei denn, Sie wollen Ihre Arbeit seit dem letzten Commit zerstören.


281
2017-10-15 18:17



Wenn Sie Änderungen nicht veröffentlicht haben, können Sie das letzte Commit entfernen

$ git reset --hard HEAD^

(Beachten Sie, dass dadurch auch alle nicht festgeschriebenen Änderungen entfernt werden würden.

Wenn Sie das zu löschende Commit bereits veröffentlicht haben, verwenden Sie git rückgängig machen

$ git revert HEAD

47
2017-08-27 10:47



Entfernen eines gesamten Commits

git rebase -p --onto SHA^ SHA

Ersetzen Sie "SHA" offensichtlich durch die Referenz, die Sie loswerden möchten. Das "^" in diesem Befehl ist wörtlich.

http://sethrobertson.github.io/GitFixUm/fixup.html


43
2017-08-31 19:36



git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId verweist auf den, zu dem Sie zurückkehren möchten


33
2017-10-16 09:51



Wenn Sie Ihre letzte Festschreibung korrigieren möchten, können Sie die Festschreibung rückgängig machen und die Dateien darin auflösen, indem Sie Folgendes tun:

git reset HEAD~1

Dadurch wird das Repository in den Status vor dem git zurückversetzt, in dem die Befehle zum Staging der Dateien hinzugefügt wurden. Ihre Änderungen werden in Ihrem Arbeitsverzeichnis gespeichert. HEAD ~ 1 bezieht sich auf das Commit unterhalb der aktuellen Spitze der Verzweigung.

Wenn Sie N commits entbinden möchten, aber die Codeänderungen in Ihrem Arbeitsverzeichnis beibehalten:

git reset HEAD~N

Wenn Sie den letzten Commit loswerden möchten und die Codeänderungen nicht beibehalten möchten, können Sie einen "harten" Reset durchführen.

git reset --hard HEAD~1

Ebenso, wenn Sie die letzten N Commits verwerfen und den Code nicht ändern wollen:

git reset --hard HEAD~N

29
2018-05-31 07:19



Erzwinge das Ändern der Historie

Angenommen, Sie möchten nicht nur das letzte Commit löschen, sondern auch bestimmte Commits der letzten n Commits löschen, gehen Sie mit:

git rebase -i HEAD~<number of commits to go back>, damit git rebase -i HEAD~5 wenn Sie die letzten fünf Commits sehen wollen.

Dann im Texteditor das Wort ändern pick zu drop neben jedem Commit, das du entfernen möchtest. Speichern und beenden Sie den Editor. Voila!

Additives Änderungsverlauf

Versuchen git revert <commit hash>. Zurückkehren wird ein erstellen Neu commit, das das angegebene Commit rückgängig macht.


20
2018-06-15 23:01