Frage Entferne lokale Commits in git


Wegen meiner schlechten Rosinenpickerei ist mein lokales Git Repository derzeit 5 Commits vor dem Ursprung und nicht in einem guten Zustand. Ich möchte alle diese Commits loswerden und von vorn beginnen.

Offensichtlich würde das Löschen meines Arbeitsverzeichnisses und das Re-Cloning es tun, aber das Herunterladen von allem aus GitHub erscheint wieder als Overkill und nicht als eine gute Nutzung meiner Zeit.

Könnte sein git revert ist was ich brauche, aber ich möchte nicht enden 10 Commits vor dem Ursprung (oder sogar 6), auch wenn es den Code selbst zurück in den richtigen Zustand bringt. Ich will nur so tun, als wäre die letzte halbe Stunde nie passiert.

Gibt es einen einfachen Befehl, der das tut? Es scheint ein offensichtlicher Anwendungsfall zu sein, aber ich finde keine Beispiele dafür.


Beachten Sie, dass es sich speziell um diese Frage handelt verpflichtet, nicht Über:

  • nicht aufgezeichnete Dateien
  • nicht veränderte Änderungen
  • gestaffelte aber nicht festgeschriebene Änderungen

930
2018-02-23 21:33


Ursprung


Antworten:


Wenn Ihre überschüssigen Commits nur für Sie sichtbar sind, können Sie es einfach tun git reset --hard origin/<branch_name> um dorthin zurückzukehren, wo der Ursprung ist.

Machen a git revert macht Neu verpflichtet sich zu entfernen alt verpflichtet sich auf eine Art und Weise, die die Geschichte aller Menschen gesund hält.


1618
2018-02-23 21:38



Löschen Sie einfach Ihren lokalen Masterzweig und erstellen Sie ihn wie folgt neu:

git branch -D master
git checkout origin/master -b master

194
2018-02-23 21:38



Versuchen:

git reset --hard <the sha1 hash>

um deinen Kopf dorthin zurückzusetzen, wo du sein willst. Verwenden Sie gitk, um zu sehen, bei welchem ​​Commit Sie sich befinden möchten. Sie können dies auch innerhalb von gitk tun.


141
2018-02-23 21:37



Wenn Sie verwenden Atlassian SourceTree App, könnten Sie die Reset-Option im Kontextmenü verwenden.

enter image description here


41
2018-01-29 20:54



Auf deinem Zweigversuch:

git reset --hard origin/<branch_name>

Validiere die Umkehrung (in den Status ohne lokale Commits) mit "git log" oder "git status"Daher.


27
2018-03-31 15:17



Löschen Sie den letzten Commit:

git reset --hard HEAD~1

Löschen Sie das letzte Commit, ohne die Arbeit zu zerstören, die Sie getan haben:

git reset --soft HEAD~1


12
2018-02-11 14:06



Um die sha1-ID des Commits zu sehen / zu bekommen, möchtest du auch zurückkommen

gitk --all

Um zu diesem Commit zurückzukehren

git reset --hard sha1_id

!Hinweis. Alle Commits, die nach diesem Commit gemacht wurden, werden gelöscht (und alle Ihre Änderungen am Projekt). Also klonen Sie das Projekt zuerst besser in einen anderen Zweig oder kopieren Sie es in ein anderes Verzeichnis.


11
2018-05-27 10:07



Für lokale Commits, die nicht gepusht werden, können Sie auch verwenden git rebase -i um ein Commit zu löschen oder zu quetschen.


7
2017-10-17 21:43



Ich hatte eine Situation, in der ich das Commit entfernen wollte, das nicht gepusht wurde, aber das Commit vor einem anderen war. Dazu habe ich folgenden Befehl verwendet

git rebase -i HEAD~2 -> es wird die letzte 2 commit neubasiert

und ich habe 'Drop' für die Commit-Signatur verwendet, die ich entfernen wollte.


5
2017-09-26 09:57