955 Stimmen

Wie man den letzten nicht gepushten Git-Commit ohne den Verlust der Änderungen zurücksetzt

Gibt es eine Möglichkeit, einen Commit rückgängig zu machen, so dass meine lokale Kopie die Änderungen behält, die in diesem Commit gemacht wurden, aber sie werden zu nicht committeten Änderungen in meiner Arbeitskopie? Das Zurücksetzen eines Commits führt Sie zum vorherigen Commit - ich möchte die gemachten Änderungen behalten, aber ich habe sie in den falschen Branch committet.

Dies wurde nicht gepusht, nur committet.

1634voto

Isantipov Punkte 17353

Es gibt viele Möglichkeiten, dies zu tun, zum Beispiel:

Falls du den Commit nicht öffentlich gepusht hast:

git reset HEAD~1 --soft   

Das war's, deine Commit-Änderungen werden in deinem Arbeitsverzeichnis sein, während der LETZTE Commit von deinem aktuellen Branch entfernt wird. Siehe git reset man


Falls du öffentlich gepusht hast (auf einem Branch namens 'master'):

git checkout -b MyCommit // speicher deinen Commit in einem separaten Branch, nur für den Fall (damit du ihn nicht aus dem Reflog graben musst, falls du etwas vermasselst :) )

wiederherstellen des Commits normal und pushen

git checkout master
git revert a8172f36 # Hash des Commits, den du löschen möchtest
# dies führt einen neuen Commit ein (sagen wir, sein Hash ist 86b48ba), der die Änderungen entfernt, die im betreffenden Commit eingeführt wurden (aber diese Änderungen sind immer noch in der Historie sichtbar)
git push origin master

jetzt, wenn du diese Änderungen als lokale Änderungen in deinem Arbeitsverzeichnis behalten möchtest ("damit deine lokale Kopie die Änderungen des Commits behält") - einfach den revert Commit mit der Option --no-commit umkehren:

git revert --no-commit 86b48ba (Hash des Revert-Commits).

Ich habe ein kleines Beispiel erstellt: https://github.com/Isantipov/git-revert/commits/master

38voto

sanka sanjeewa Punkte 723

Der einfachste Weg, um den letzten Git-Commit rückgängig zu machen, besteht darin, den Befehl git reset mit einer der folgenden Optionen auszuführen

  • soft
  • hard
  • mixed

Angenommen, Sie haben zwei Commits hinzugefügt und möchten den letzten Commit rückgängig machen

$ git log --oneline

45e6e13 (HEAD -> master) Zweiter Commit
eb14168 Initialer Commit

Die –soft-Option macht den letzten Commit rückgängig und bewahrt die Änderungen an Ihren Dateien

$ git reset --soft HEAD~1

$ git status

Im Branch master
Änderungen, die commiten werden:
  (use "git restore --staged ..." to unstage)
    geändert:   file.html

$ git log --oneline

eb14168 (HEAD -> master) Initialer Commit

Die –hard-Option macht den letzten Commit rückgängig und verwirft alle Änderungen im Arbeitsverzeichnis und Index

$ git reset --hard HEAD~1

$ git status

nothing to commit, working tree clean

$ git log --oneline

eb14168 (HEAD -> master) Initialer Commit

Die --mixed-Option macht den letzten Commit rückgängig und behält Änderungen im Arbeitsverzeichnis bei, aber NICHT im Index

$ git reset --mixed HEAD~1

$ git status

Im Branch master
Änderungen, die nicht zum Commit vorgemerkt sind:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
    geändert:   file.html

no changes added to commit (use "git add" and/or "git commit -a")

$ git log --oneline

eb14168 (HEAD -> master) Initialer Commit

18voto

Aminadav Glickshtein Punkte 20337

Wenn Sie die Änderungen übernommen haben, können Sie sie rückgängig machen und die Dateien ohne Verwendung eines anderen Branches wieder in die Bühne verschieben.

git show HEAD > patch
git revert HEAD
git apply patch

Es wird eine Patch-Datei erstellt, die die letzten Branch-Änderungen enthält. Dann werden die Änderungen rückgängig gemacht. Und schließlich werden die Patch-Dateien auf den Arbeitsbereich angewendet.

16voto

Beki Punkte 848

Neues Update für Mitgoogler ab 2021.

Hier ist eine moderne Möglichkeit, Ihren letzten Commit rückgängig zu machen, wenn Sie ein VSCode-Benutzer sind.

  1. Gehen Sie zu Ihrem Source Control-Tab auf der linken Seite (Verknüpfung: Strg + Umschalt + G G).
  2. Drücken Sie auf der linken Seite des kreisförmigen Update-Symbols auf .... Siehe den Screenshot unten: Screenshot von Source-Control
  3. Navigieren Sie zu Commit, dann zu Letzten Commit rückgängig machen. Hier ist ein Screenshot: Bildbeschreibung eingeben

Alles, was es tut, ist, Ihr Repository genau so wiederherzustellen, wie es war, bevor Sie den Commit gemacht haben, mit Ihren Änderungen unberührt.

12voto

Eduard Streltsov Punkte 960

Für den Fall: "Dies wurde nicht gepusht, nur committed." - Wenn Sie IntelliJ (oder eine andere JetBrains IDE) verwenden und Sie Änderungen noch nicht gepusht haben, können Sie folgendes tun.

  1. Gehen Sie zum Versionskontrollfenster (Alt + 9/Command + 9) - Registerkarte "Log".
  2. Klicken Sie mit der rechten Maustaste auf einen Commit vor Ihrem letzten.
  3. Zurücksetzen des aktuellen Branches hierher.
  4. wählen Sie Sanft (!!!)
  5. Drücken Sie die Zurücksetzen-Schaltfläche am unteren Rand des Dialogfensters.

Fertig.

Dadurch werden Ihre Änderungen "uncommitted" und Ihr Git-Status wird auf den Stand vor Ihrem letzten lokalen Commit zurückgesetzt. Sie verlieren keine Änderungen, die Sie vorgenommen haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X