2 Stimmen

Löschen/Wiederherstellen von Zusammenführungen in Git

Ich weiß, dass Git tonnenweise Dokumentation hat und es gibt tonnenweise Beiträge auf SO darüber (ich habe mir die Wie löscht man einen 'git commit'? y diese zum Beispiel), aber bisher hat nichts funktioniert, und ich bin nicht sicher, was ich tun soll.

Ich habe ein Repo, das bisher nur ich bin committing zu, aber ich habe vor kurzem begonnen, von zwei verschiedenen Laptops arbeiten und irgendwie ich versehentlich schob einige Unsinn, dass Git sah als eine Zusammenführung und dann schob ich die neuesten Änderungen auch.

Ich habe versucht, herauszufinden, wie ich diese letzten 2 Commits komplett löschen kann, um das Repo auf den Stand vor diesem schicksalhaften Tag zurückzuspulen (da ich jetzt einen Haufen neuer Commits habe, die ich in das Repo bringen muss). Wenn Sie mir einen Tipp geben können, beachten Sie bitte, dass das Repo auf Github gehostet wird aquí .

2voto

Adam Dymitruk Punkte 116211

Für jemanden, der neu ist, ist es am einfachsten, anstelle von git reset --hard HEAD^ ist die Verwendung von gitk --all.

Auf diese Weise sehen Sie Ihren gesamten Verlauf. Der aktuelle Zweig ist fett gedruckt. Sie können mit der rechten Maustaste auf den Commit klicken, an dem Sie sich zuvor befanden, und "Aktuelle Verzweigung hier zurücksetzen" wählen. Sie werden dann gefragt, welche Art von Zurücksetzen Sie durchführen wollen. Wählen Sie "hart" und Sie sollten wieder dort sein, wo Sie sein wollen.

1voto

Lily Ballard Punkte 175449

Um die letzte Übertragung zu löschen, verwenden Sie einfach git reset --hard HEAD^ . Wenn die letzte Übergabe eine Zusammenführung ist, kehrt diese zum ersten Elternteil zurück (d.h. zum Zustand vor der merge / pull ausgeführt wurde).

Wenn Sie den genauen Commit identifizieren können, der die Spitze des Zweigs sein soll, können Sie git reset --hard $SHA wobei $SHA ist die betreffende Übertragung.

0voto

shkschneider Punkte 17115

Das hat bei mir funktioniert (nach meiner Erinnerung):

git reset --hard HEAD^^
git push --force HEAD:master
git pull

0voto

rsaw Punkte 3125

Dank an eine Antwort in der von Shahbaz gestellten Frage habe ich zunächst versucht

git push -f origin HEAD^^:master

was die letzten beiden Übertragungen perfekt zu entfernen schien. Aber sobald ich einige Änderungen an den lokalen Dateien vornahm und einen Push machte, tauchten die alten Commits wieder auf! :(

Nach einem weiteren Versuch, dieses Mal mit HEAD^^^ (da ich nun die letzten 3 Übertragungen entfernen musste), sah ich mir git log und sah, dass alles noch vor Ort war. Da ich nicht wusste, wie ich das Problem lösen sollte, löschte ich einfach das lokale Verzeichnis, klonte das Projektarchiv erneut und kopierte meine neu geänderten Dateien manuell hinein. Schließlich brachten Adds und Pushes die alten unerwünschten Commits nicht mehr zurück.

Natürlich bin ich sicher, dass es einen besseren Weg gibt, aber ich war nicht in der Lage, ihn zu verwirklichen, indem ich den Vorschlägen von euch lieben Menschen folgte. (Beispiel: Ich habe versucht git rebase -i HEAD~4 aber ich habe die Ausgabe im Editor nicht verstanden - es gab viel zu viele Zeilen (9) und ich wusste nicht, was ich tun sollte).

Ich überlasse es jemandem, der mehr Erfahrung hat, zu entscheiden, ob diese Frage als Duplikat gelöscht werden sollte.

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