Ich habe versehentlich zu viele Dateien in ein SVN-Repository übertragen und einige Dinge geändert, die ich nicht wollte. (Seufz.) Um sie wieder in ihren vorherigen Zustand zu versetzen, war das Beste, was ich mir einfallen lassen konnte
svn rm l3toks.dtx
svn copy -r 854 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx
Herrgott! Gibt es keinen besseren Weg? Warum kann ich nicht einfach so etwas schreiben:
svn revert -r 854 l3toks.dtx
Okay, ich verwende nur Version 1.4.4, aber ich habe die Änderungsliste für den 1.5-Zweig überflogen und konnte nichts sehen, was direkt damit zusammenhängt. Habe ich etwas vergessen?
Edit: Ich glaube ich war nicht klar genug. Ich glaube nicht , ich will merge umkehren, denn dann werde ich die Änderungen verloren , dass ich habe machen wollen! Sagen Sie das fileA
und fileB
wurden beide modifiziert, aber ich wollte nur begehen fileA
; versehentlich tippen
svn commit -m "small change"
schreibt beide Dateien fest, und jetzt möchte ich ein Rollback durchführen fileB
. Das umgekehrte Zusammenführen macht diese Aufgabe nicht einfacher (soweit ich das beurteilen kann) als die oben beschriebenen Schritte.
Antworten:
oder
Die beiden Befehle sind äquivalent .
quelle
svn merge -c -854 my.file
und dann tuesvn diff
, scheint es eine Revision vor 854 (dh 853) anzuzeigen ); nur wenn ich es tuesvm merge -c 854 myfile
(ohne das-
), sieht es so aus, als ob myfile auf rev 854 zurückgesetzt wird. Nochmals vielen Dank, Prost!Lesen Sie den Abschnitt " Änderungen rückgängig machen " im SVN-Buch
quelle
Es tut mir leid, dass ich nur bei einer Wiederholung der zuvor gegebenen Antwort etwas Platz verbraucht habe - aber damit habe ich immer Probleme.
Angenommen, ich habe die lokalen Dateien auf die neueste Version aktualisiert, nämlich 854. Dann möchte ich eine ältere Version erhalten - die Version der Datei aus wenigen früheren Versionen, z. B. Version 851.
Kopie würde funktionieren:
.. aber ich kann mich nicht darum kümmern, nach der Repo-URL zu suchen :)
Das Update könnte anscheinend funktionieren:
... es markiert jedoch auch die lokale Kopie als "frisch ausgecheckt" oder vielmehr "wie Online-Revision" (dh in Tortoise / RabbitVCS erhalten Sie ein grünes OK-Häkchen) - was bedeutet, dass Sie dies nicht tun können
svn ci -m "rolled back to r 851"
: einfach, weil die lokalesubversion
Die ausführbare Datei bemerkt keine lokalen Änderungen und macht sich nicht die Mühe, etwas in das Online-Repository hochzuladen.Und wie bereits beantwortet, funktioniert Reverse Merge - aber in diesem Fall sollte man sich nicht auf die Verknüpfungssyntax verlassen. aber konkret angeben:
Ich muss zugeben - ich würde den Satz " Reverse-Merging von r854 bis r852 in Datei " niemals so verstehen, dass er "Ich habe gerade r851 Ihrer Datei erhalten und alles überschrieben, was Sie zuvor lokal hatten - und er ist als anders als die letzte Online-Revision gekennzeichnet Sie können es als neue 'Rollback'-Revision wieder online einchecken ", aber ich denke (und hoffe :)), dass es das ist :)
Danach kann man
svn diff
schnell sicherstellen, dass wir vor Ort die richtige Revision erhalten haben. Außerdem wird die Datei in Tortoise / RabbitVCS (dh anders als in der neuesten festgeschriebenen Version) mit einem roten Ausrufezeichen gekennzeichnet undsvn ci -m "rolled back to r 851"
kann dieses Mal ausgeführt werden.Beachten Sie auch, dass Sie, wenn Sie nach dem umgekehrten Zusammenführen endlich Ihre Meinung ändern ( dh Sie möchten trotzdem weiter an der neuesten HEAD-Revision arbeiten, hier 854 -, nachdem Sie lokal auf 851 zurückgesetzt haben, aber den Rollback noch nicht festgeschrieben haben ) sollten Sie nicht verwenden
svn up
, da lediglich angegeben wird, dass es sich bereits um " Bei Revision 854 " handelt. stattdessen verwendensvn revert --recursive .
oder ähnlich ...Prost!
Ref: Zurücksetzen von Änderungen mit Subversion - Jacob Wright - Flex, AIR, PHP usw.
EDIT: ... und anscheinend kann genau der gleiche Effekt
svn merge -r HEAD:851 l3toks.dtx
erzielt werden mit:quelle
--force
Verzeichnisse überschreiben. Denken Sie daran, dass alle Änderungen überschrieben werden.svn export
mir etwas oder ist das in diesen GUIs einfach nicht implementiert?Ich musste kürzlich auf eine bestimmte Revision zurückgreifen, um einen älteren Build zu debuggen, und das funktionierte wie Magie:
Ich musste alle Konflikte mit der Option "tc" lösen, da mir lokale Änderungen egal waren (alles, was mir wichtig war, vor dem Zurücksetzen eingecheckt)
Es war auch einfach, zur Kopfrevision zurückzukehren:
quelle
Was Sie suchen, wird als "Reverse Merge" bezeichnet. Sie sollten die Dokumente zur Zusammenführungsfunktion im SVN-Buch konsultieren (wie luapyad, genauer gesagt der erste Kommentator zu diesem Beitrag, hervorhebt). Wenn Sie Tortoise verwenden, können Sie auch einfach in die Protokollansicht gehen und mit der rechten Maustaste klicken und "Änderungen aus dieser Revision zurücksetzen" für diejenige auswählen, bei der Sie den Fehler gemacht haben.
quelle
Reverse Merge ist genau das, was Sie wollen (siehe luapyads Antwort). Wenden Sie die Zusammenführung einfach auf die fehlerhaft festgeschriebene Datei anstatt auf das gesamte Verzeichnis an.
quelle
Wenn Sie nur das letzte Einchecken rückgängig machen möchten, können Sie Folgendes verwenden
Auf diese Weise müssen Sie nicht nach den aktuellen und vorherigen Versionsnummern suchen.
quelle
svn merge führt Revisionen zusammen und nicht zurück. Wenn Sie also eine Ergänzung in Ihrer HEAD-Version haben und diese mit einer früheren Revision zusammenführen, bleibt die Änderung bestehen.
Ich benutze svn cat und leite es dann in die Datei um:
Dann haben Sie den 851-Inhalt in dieser Datei und können ihn wieder einchecken.
quelle
Wenn Sie die Eclipse-IDE mit dem SVN-Plugin verwenden, haben Sie folgende Möglichkeiten :
Dadurch werden die Dateien auf die gewünschte Revision zurückgesetzt. Denken Sie daran, dass SVN die Änderungen als neues Commit ansieht. Das heißt, die Änderung erhält eine neue Revisionsnummer, und es besteht keine Verbindung zwischen der alten und der neuen Revision. Sie sollten in den Festschreibungskommentaren angeben, dass Sie diese Dateien auf eine bestimmte Revision zurücksetzen.
quelle