26188 Stimmen

Wie kann ich die letzten lokalen Übertragungen in Git rückgängig machen?

Ich habe aus Versehen die falschen Dateien übertragen a Git aber den Commit noch nicht auf den Server gepusht.

Wie kann ich diese Übertragungen aus dem lokalen Repository rückgängig machen ?

Die einzige Möglichkeit scheint zu sein, die Änderungen in einen GUI-Texteditor zu kopieren, dann den gesamten lokalen Klon zu löschen, dann das Repository neu zu klonen und dann die Änderungen erneut anzuwenden. Allerdings,

  • Dies kann zu Datenverlusten führen.
  • Es ist sehr schwer, dies zu tun, wenn nur eine zufällige git commit ausgeführt wurde.

Gibt es einen besseren Weg?

2 Stimmen

Siehe diese Anleitung für das Rückgängigmachen von Git Commits auf Local, Public und Git Branch Wie man Git Commits wie ein Profi rückgängig macht

703 Stimmen

Weißt du, was Git braucht? git undo , das war's. Dann verschwindet der Ruf von Git, mit Fehlern von uns Normalsterblichen umzugehen. Implementieren Sie, indem Sie den aktuellen Zustand auf einen Git-Stack schieben, bevor Sie eine git Befehl. Es würde die Leistung beeinträchtigen, daher wäre es am besten, ein Konfigurations-Flag hinzuzufügen, das angibt, ob es aktiviert werden soll.

58 Stimmen

@YiminRong Das kann man mit Git's alias Funktion: git-scm.com/book/de/v2/Git-Basics-Git-Aliases

542voto

Zombo Punkte 1

Ich bevorzuge die Verwendung von git rebase -i für diese Aufgabe, denn es wird eine schöne Liste angezeigt, in der ich die zu löschenden Commits auswählen kann. Es ist vielleicht nicht so direkt wie einige andere Antworten hier, aber es ist einfach fühlt sich richtig an .

Wählen Sie, wie viele Übertragungen Sie auflisten möchten, und rufen Sie dann wie folgt auf (um die letzten drei aufzulisten)

git rebase -i HEAD~3

Musterliste

pick aa28ba7 Sanity check for RtmpSrv port
pick c26c541 RtmpSrv version option
pick 58d6909 Better URL decoding support

Git entfernt dann die Commits für jede Zeile, die Sie entfernen.

508voto

Brent Bradburn Punkte 45995

Reparieren der vorherigen lokalen Übertragung

Verwenden Sie git-gui (oder ähnliches), um eine git commit --amend . Über die grafische Benutzeroberfläche können Sie einzelne Dateien aus der Übergabe hinzufügen oder entfernen. Sie können auch die Commit-Nachricht ändern.

Rückgängigmachen der vorherigen lokalen Übertragung

Setzen Sie Ihre Verzweigung einfach auf den vorherigen Standort zurück (z. B. mit gitk o git rebase ). Wenden Sie dann Ihre Änderungen aus einer gespeicherten Kopie erneut an. Nach der Garbage Collection in Ihrem lokalen Repository wird es so sein, als ob die unerwünschte Übertragung nie stattgefunden hätte. Um all dies mit einem einzigen Befehl zu erledigen, verwenden Sie git reset HEAD~1 .

Ein Wort der Warnung : Unvorsichtige Verwendung von git reset ist ein guter Weg, um Ihre Arbeitskopie in einen verwirrenden Zustand zu versetzen. Ich empfehle Git-Neulingen, dies nach Möglichkeit zu vermeiden.

Rückgängig machen einer öffentlichen Übertragung

Durchführen einer umgekehrte Rosinenpickerei ( git-revert ), um die Änderungen rückgängig zu machen.

Wenn Sie noch keine anderen Änderungen auf Ihren Zweig gezogen haben, können Sie dies einfach tun...

git revert --no-edit HEAD

Pushen Sie dann Ihren aktualisierten Zweig in das gemeinsame Repository.

Der Commit-Verlauf zeigt beide Commits getrennt an .


Fortgeschrittene: Berichtigung der privat Zweig im öffentlichen Repository

Dies kann gefährlich sein - stellen Sie sicher, dass Sie eine lokale Kopie der Verzweigung haben, die Sie zurückschieben können.

Beachten Sie auch, dass Sie dies nicht tun sollten, wenn jemand anderes an dem Zweig arbeitet.

git push --delete (branch_name) ## remove public version of branch

Bereinigen Sie Ihren Zweig lokal und schieben Sie ihn dann neu...

git push origin (branch_name)

Im Normalfall brauchen Sie sich nicht darum zu kümmern, dass die Commit-Historie Ihres privaten Zweigs makellos ist. Schieben Sie einfach einen Folge-Commit (siehe 'Wie man einen öffentlichen Commit rückgängig macht' weiter oben) und machen Sie später einen squash-merge um die Geschichte zu verbergen.

420voto

poorva Punkte 1615

Wenn Sie den Vorgang dauerhaft rückgängig machen wollen und Sie ein Repository geklont haben.

Die Übertragungs-ID kann durch angezeigt werden:

git log 

Dann können Sie so etwas tun:

git reset --hard <commit_id>

git push origin <branch_name> -f

413voto

santos_mgr Punkte 37

Wenn Sie Junk begangen haben, aber nicht geschoben,

git reset --soft HEAD~1

KOPF~1 ist eine Abkürzung für die Übergabe vor dem Kopf. Alternativ können Sie sich auf die SHA-1 des Hashes, wenn Sie auf zurücksetzen wollen. -weich löscht den Commit, lässt aber alle geänderten Dateien als "Changes to be committed" zurück, wie es der Git-Status ausdrücken würde.

Wenn Sie alle Änderungen an getrackten Dateien im Arbeitsbaum seit dem Commit vor head loswerden wollen, verwenden Sie " --hart " stattdessen.

OR

Wenn Sie bereits geschoben und jemand gezogen hat, was bei mir meistens der Fall ist, können Sie nicht Git-Reset . Sie können jedoch eine mit einem Git rückgängig machen ,

git revert HEAD

Dadurch wird ein neuer Commit erstellt, der alles rückgängig macht, was durch den versehentlichen Commit eingeführt wurde.

354voto

Varun Parakh Punkte 201

Auf QuellBaum (GUI für GitHub) können Sie mit der rechten Maustaste auf den Commit klicken und einen 'Reverse Commit' durchführen. Dies sollte Ihre Änderungen rückgängig machen.

Auf dem Terminal:

Alternativ können Sie auch verwenden:

git revert

Oder:

git reset --soft HEAD^ # Use --soft if you want to keep your changes.
git reset --hard HEAD^ # Use --hard if you don't care about keeping your changes.

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