Wie kann ich meine letzte versehentlich festgeschriebene (nicht gedrückte) Änderung in Mercurial rückgängig machen?
Wenn möglich, wäre eine Möglichkeit mit TortoiseHg vorzuziehen.
Aktualisieren
In meinem konkreten Fall habe ich einen Änderungssatz festgeschrieben (nicht gepusht). Dann habe ich vom Server gezogen und aktualisiert. Mit diesen neuen Updates habe ich entschieden, dass mein letztes Commit veraltet ist und ich es nicht synchronisieren möchte. Es scheint also hg rollback
nicht genau das zu sein, wonach ich suche, weil es den Pull anstelle meines Commits rückgängig machen würde.
mercurial
tortoisehg
mercurial-commit
Martin Buberl
quelle
quelle
hg rollback
und dann wieder ziehen?strip --keep
: stackoverflow.com/questions/29413851/… löst die Aufgabe direkt, ebenso wie MQ qimport. Alternativ kann es besser sein, einfachrebase
im Szenario, wenn die lokalen Änderungen ebenfalls beibehalten werden sollen und kein Konflikt vorliegt. (Verwenden Sie eine Zusammenführung, um einige kombinierte Änderungen aus beiden Zweigen beizubehalten, wenn dies das gewünschte Endziel des Diagramms ist, insbesondere in einem Fall ohne schnellen Vorlauf.) Es kann auch gültig sein, nur den Zweig zu schließen, wodurch der Verlauf weiterhin erhalten bleibt (aber anders als eine Zusammenführung) je nach gewünschtem Endzustand.hg strip --keep
wird der Befehl verwendet, aber Sie müssen eine Revision bereitstellen, zhg strip --keep -r .
. Diese Antwort erklärt gut stackoverflow.com/a/19064016/1286571Antworten:
Ein Weg wäre
(veraltet ab Hg2.7, August 2013)hg rollback
Siehe Abschnitt TortoiseHg Recovery :
Dieser Thread beschreibt auch den Unterschied zwischen
hg rollback
undhg strip
:(geschrieben von Martin Geisler, der auch zu SO beiträgt)
ForeverWintr schlägt in den Kommentaren vor (2016, 5 Jahre später)
quelle
hg rollback
das Ziehen anstelle des Festschreibens rückgängig gemacht.hg commit --amend
es funktionieren soll, aber für mich gab es einen Editor zum Ändern der Commit-Nachricht und keine Methode zum Ändern, welche Dateien enthalten waren. Ich habe den Editor ohne Speichern verlassen und festgestellt, dass mein fehlerhaftes Commit geändert wurde, um ALLE geänderten Dateien einzuschließen !hg commit --amend
. Sie können die Freigabe von Dateienhg forget
aufheben, indem Sie sie zuerst eingeben, z. B.:hg forget filea; hg commit --amend
, Aber das scheint nicht intuitiv zu sein. hg strip --keep ist wahrscheinlich eine bessere Lösung für moderne hg.hg strip
entfernt eine Revision (und alle Nachkommen) vollständig aus dem Repository.Um Strip zu verwenden, müssen Sie MqExtension installieren, indem Sie der .hgrc (oder mercurial.ini) die folgenden Zeilen hinzufügen:
In TortoiseHg ist der Befehl strip in der Workbench verfügbar. Klicken Sie mit der rechten Maustaste auf eine Revision und wählen Sie "Verlauf ändern" -> "Streifen".
Da
strip
sich der Verlauf des Repositorys ändert, sollten Sie ihn nur für Revisionen verwenden, die noch niemandem zugänglich sind. Wenn Sie mercurial 2.1+ verwenden, können Sie diese Informationen mithilfe von Phasen verfolgen. Befindet sich ein Commit noch in der Entwurfsphase, wurde es nicht für andere Repositorys freigegeben, sodass Sie es sicher entfernen können. (Danke an Zasurus für diesen Hinweis).quelle
Da Sie kein Rollback durchführen können, sollten Sie dieses Commit mit dem neuen Kopf zusammenführen, den Sie beim Ziehen erhalten haben. Wenn Sie nichts von der Arbeit wollen, die Sie darin geleistet haben, können Sie dies einfach mit diesem Tipp tun .
Wenn Sie also an ihren Kopf gezogen und aktualisiert haben, können Sie dies tun:
behält alle Änderungen in der aktuell ausgecheckten Revision und keine der Änderungen in der nicht ausgecheckten Revision (die von Ihnen geschriebene, die Sie nicht mehr möchten) bei.
Dies ist eine großartige Möglichkeit, da dadurch Ihre Historie genau und vollständig bleibt. Wenn in 2 Jahren jemand einen Fehler in dem findet, was Sie heruntergezogen haben, können Sie in Ihrer (unbenutzten, aber gespeicherten) Implementierung der gleichen Sache nachsehen und sagen: "Oh, ich habe es richtig gemacht". :) :)
quelle
hg rollback
ist was du willst.In TortoiseHg
hg rollback
wird dies im Commit-Dialog ausgeführt. Öffnen Sie den Commit-Dialog und wählen Sie "Rückgängig".quelle
In der aktuellen Version von TortoiseHg Workbench 4.4.1 (07.2018) können Sie verwenden
Repository
-Rollback/undo...
:quelle
Die Problemumgehung.
Wenn Sie nicht auf den Server pushen, klonen Sie in einen neuen Ordner, andernfalls werden alle Dateien aus Ihrem Repository-Ordner gelöscht und neu geklont.
quelle
Nachdem Sie Ihren Arbeitsbereich abgerufen und aktualisiert haben, klicken Sie mit der rechten Maustaste auf den Änderungssatz, den Sie entfernen möchten, und klicken Sie dann auf Verlauf ändern -> Streifen. Dadurch wird der Änderungssatz entfernt und Sie zeigen auf den Standardtipp.
quelle