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

199voto

U. Ali Punkte 151

Erster Lauf:

git reflog

Es zeigt Ihnen alle möglichen Aktionen an, die Sie an Ihrem Projektarchiv durchgeführt haben, z.B. Commit, Merge, Pull, etc.

Dann tun Sie das:

git reset --hard ActionIdFromRefLog

184voto

akshay_rahar Punkte 1561

Letzte Übertragung rückgängig machen:

git reset --soft HEAD^ o git reset --soft HEAD~

Damit wird die letzte Übertragung rückgängig gemacht.

Hier --soft bedeutet Zurücksetzen in den Bereitstellungsmodus.

HEAD~ o HEAD^ bedeutet, dass die Übergabe vor HEAD erfolgen soll.


Ersetzen Sie den letzten Commit durch einen neuen Commit:

git commit --amend -m "message"

Er ersetzt den letzten Commit durch den neuen Commit.

182voto

CommaToast Punkte 10365

Eine andere Möglichkeit:

Checken Sie den Zweig aus, den Sie rückgängig machen wollen, und setzen Sie dann Ihre lokale Arbeitskopie auf den Commit zurück, der auf dem entfernten Server der letzte sein soll (alles, was danach kommt, wird gelöscht). Um dies zu tun, habe ich in SourceTree mit der rechten Maustaste auf den Zweig geklickt und "Reset BRANCHNAME to this commit" gewählt.

Wechseln Sie dann in das lokale Verzeichnis Ihres Repositorys und führen Sie diesen Befehl aus:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

Dies löscht alle Übertragungen nach der aktuellen in Ihrem lokalen Repository, aber nur für diesen einen Zweig.

170voto

user853293 Punkte 36

Type git log und suchen Sie den Hash-Code der letzten Übertragung und geben Sie ihn ein:

git reset <the previous co>

166voto

egridasov Punkte 679

In meinem Fall habe ich versehentlich einige Dateien übertragen, die ich nicht wollte. Also habe ich Folgendes getan und es hat funktioniert:

git reset --soft HEAD^
git rm --cached [files you do not need]
git add [files you need]
git commit -c ORIG_HEAD

Überprüfen Sie die Ergebnisse mit gitk oder git log --stat

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