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

951voto

Zaz Punkte 42583

So ändern Sie die letzte Übertragung

Ersetzen Sie die Dateien im Index:

git rm --cached *.class
git add *.java

Dann, wenn es sich um eine private Niederlassung handelt, ändern. die Übergabe:

git commit --amend

Oder, wenn es ein gemeinsamer Zweig ist, machen Sie eine neue Übergabe:

git commit -m 'Replace .class files with .java files'

( So ändern Sie eine frühere Übertragung verwenden Sie die geniale interaktive Umbasierung .)


ProTip™: hinzufügen. *.class zu einer gitignore um zu verhindern, dass dies wieder geschieht.


Um eine Übertragung rückgängig zu machen

Das Ändern eines Commits ist die ideale Lösung, wenn Sie den letzten Commit ändern müssen, aber eine allgemeinere Lösung ist reset .

Sie können Git auf jeden Commit mit zurücksetzen:

git reset @~N

Wo N ist die Anzahl der Übertragungen vor HEAD et @~ wird auf die vorherige Übertragung zurückgesetzt.

Anstatt den Commit zu ändern, könnten Sie auch verwenden:

git reset @~
git add *.java
git commit -m "Add .java files"

Überprüfen Sie git help reset insbesondere die Abschnitte über --soft --mixed et --hard um besser zu verstehen, was das bedeutet.

Reflog

Wenn Sie einen Fehler machen, können Sie jederzeit das Reflog verwenden, um ausgelassene Übertragungen zu finden:

$ git reset @~
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~
2c52489 HEAD@{1}: commit: added some .class files
$ git reset 2c52489
... and you're back where you started

837voto

Jaco Pretorius Punkte 24562

Verwenden Sie git revert <commit-id> .

Um die Commit-ID zu erhalten, verwenden Sie einfach git log .

692voto

Madhan Ayyasamy Punkte 14570

Wenn Sie vorhaben, einen lokalen Commit komplett rückgängig zu machen, was auch immer Sie bei dem Commit geändert haben, und wenn Sie sich darüber keine Gedanken machen, führen Sie einfach den folgenden Befehl aus.

git reset --hard HEAD^1

(Dieser Befehl ignoriert Ihren gesamten Commit und Ihre Änderungen gehen vollständig in Ihrem lokalen Arbeitsbaum verloren). Wenn Sie Ihren Commit rückgängig machen wollen, aber Ihre Änderungen im Staging-Bereich haben wollen (vor dem Commit genauso wie nach git add ), dann führen Sie den folgenden Befehl aus.

git reset --soft HEAD^1

Jetzt kommen Ihre übertragenen Dateien in den Staging-Bereich. Angenommen, Sie wollen die Dateien wieder in den Staging-Bereich bringen, weil Sie einen falschen Inhalt bearbeiten müssen, dann führen Sie folgenden Befehl aus

git reset HEAD

Jetzt werden Dateien aus dem bereitgestellten Bereich in den nicht bereitgestellten Bereich übertragen. Jetzt sind die Dateien zur Bearbeitung bereit. Was immer Sie also ändern, Sie wollen es bearbeiten und hinzufügen und eine frische/neue Übergabe machen.

Mehr (Link gebrochen) ( Archivierte Version )

620voto

nickf Punkte 517253

Wenn Sie eine Git-Extras installiert ist, können Sie git undo um die letzte Übertragung rückgängig zu machen. git undo 3 werden die letzten drei Übertragungen rückgängig gemacht.

581voto

neoneye Punkte 47046

Ich wollte die letzten fünf Commits in unserem gemeinsamen Repository rückgängig machen. Ich suchte die Revisionsnummer, zu der ich zurückgehen wollte. Dann tippte ich das Folgende ein.

prompt> git reset --hard 5a7404742c85
HEAD is now at 5a74047 Added one more page to catalogue
prompt> git push origin master --force
Total 0 (delta 0), reused 0 (delta 0)
remote: bb/acl: neoneye is allowed. accepted payload.
To git@bitbucket.org:thecompany/prometheus.git
 + 09a6480...5a74047 master -> master (forced update)
prompt>

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