Durch die Verwendung einer grafischen Benutzeroberfläche im Gegensatz zur CLI habe ich versehentlich jede Datei in einem Mercurial-Projekt entfernt.
Ich erholte mich mit Revert ok und verlor etwas Arbeit, die ich, da ich eine Zeitmaschine habe, leicht zurückbekommen konnte. Aber gibt es eine Möglichkeit, solche Dateien zu entfernen / wiederherzustellen? Durchsuchte das Handbuch und googelte, konnte aber nichts sehen. Irgendwelche Plugins?
Ich beantworte hier wahrscheinlich meine eigene Frage, aber die Dateien wurden aus dem Verzeichnis entfernt und befanden sich nicht im Papierkorb, um sie wiederherzustellen. Ich gehe also davon aus, dass Entfernen unwiderruflich ist.
ps Ich weiß das hg forget
oder hg remove -Af
werde es entfernen, ohne es aus dem Verzeichnis zu löschen, aber meine Frage hat mit dem Fehler zu tun, den ich gemacht habe, im Gegensatz zu coolem Durchdenken der Aktion.
Antworten:
Verwenden Sie zunächst
hg grep
, um die gelöschte Datei zu finden, die Sie wiederherstellen möchten. Die Ausgabe dieses Befehls zeigt Ihnen die letzte Revision, für die die Datei vorhanden war, und den Pfad zur gelöschten Datei. Führen Siehg revert -r <revision number> <path to deleted file>
zweitens Folgendes aus: Die gelöschte Datei befindet sich jetzt in Ihrer Arbeitskopie und kann wieder in den Kopf übernommen werden.quelle
hg log -I '**file.ext'
Zitat aus dem Kommentar:
Wenn dies der Fall ist, müssen Sie nur das Arbeitsverzeichnis auf die vorherige Version aktualisieren:
Beachten Sie die negative Versionsnummer. Wenn die von Ihnen gelöschten Dateien nicht in der vorherigen Version enthalten sind, können Sie sie folgendermaßen finden:
quelle
Nun, das hat bei mir funktioniert.
quelle
Für Mercurial 1.6 und höher
Wenn Sie den Namen der Löschdatei kennen, können Sie deren Überarbeitung leicht finden mit:
Dadurch erhalten Sie die Überarbeitung, wenn eine Datei mit dem Namen NAME.c (im Stammverzeichnis) gelöscht wird.
Dann können Sie die Datei auf die vorherige Revision zurücksetzen mit (wie bei anderen Antworten):
Sie können stattdessen ein Dateinamenmuster verwenden, um sich an das anzupassen, was Sie wissen. Beispielsweise können Sie
**/NAME.c
in allen Verzeichnissen suchen. Sie können darüber in Dateinamenmuster lesen . Verwenden Sie diesen Link, um Informationen zu den neuen Revset-Spezifikationen zu erhalten .quelle
Eine Ergänzung zur akzeptierten Antwort - dies ist schneller, wenn Sie alle Entfernungen in einem Commit rückgängig machen möchten. Ich habe einen großen Ordner mit ein paar hundert Dateien gelöscht und dies getan
hg addremove
, was überhaupt nicht meine Absicht war, also musste ich alle diese Löschvorgänge rückgängig machen.Verwenden Sie "Gelöschte Dateien suchen" im Mercurial-Repository-Verlauf schnell? + xargs + tr, setze alle Entfernungen von Revision -3 auf die Version von Revision -4 zurück:
Beachten Sie, dass dies fehlschlägt, wenn eine Ihrer Dateien Leerzeichen im Namen enthält. http://hgbook.red-bean.com/read/customizing-the-output-of-mercurial.html scheint derzeit keine Vorlagen zu haben, nach denen
{file_dels}
geteilt\n
wird.quelle
Sie können das letzte Commit für ein Repo mit rückgängig machen
hg rollback
. Es ist nur eine Rollback-Ebene verfügbar. Wenn Sie also das Entfernen mit mehr als einem Commit durchgeführt haben, wird Ihre Änderung dadurch nicht vollständig rückgängig gemacht. Dies funktioniert nur in Ihrem lokalen Repository. Wenn Sie also gepusht haben, können Sie es im Remote-Repo nicht rückgängig machen.quelle
hg rollback
Die entfernte Datei wird nicht wiederhergestellt, da das Löschen der Datei nicht Teil der Festschreibungstransaktion ist.Sie können festgeschriebene Revisionen mit dem
hg strip
Befehl entfernen , der von der Erweiterung mq (Mercurial Queues) bereitgestellt wird. Dies sollte Ihnen Ihre Dateien zurückgeben.Erstellen Sie vor dem Ausprobieren ein Backup, da dadurch die Mercurial-Datenbank mit Änderungssätzen geändert wird.
quelle
Die folgende Methode ist unkompliziert und so dumm, dass nichts schief gehen kann. Wenn Sie mehrere Dateien gelöscht oder umbenannt haben, ist dies in Ordnung.
und jetzt starten Sie mc (oder Far Manager) und vergleichen, was es war und was es geworden ist.
Wenn es fertig ist, einfach löschen
mydirectory1
.quelle
Folgendes hat bei mir funktioniert.
(Optional, um alle Dateien zurückzusetzen)
quelle