J'ai accidentellement commis trop de fichiers dans un référentiel SVN et j'ai changé certaines choses que je ne voulais pas. (Soupir.) Afin de les ramener à leur état antérieur, le mieux que j'ai pu trouver était
svn rm l3toks.dtx
svn copy -r 854 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx
Jeez! N'y a-t-il pas de meilleur moyen? Pourquoi ne puis-je pas simplement écrire quelque chose comme ça:
svn revert -r 854 l3toks.dtx
D'accord, j'utilise uniquement la v1.4.4, mais j'ai parcouru la liste des modifications pour la branche 1.5 et je n'ai rien vu de directement lié à cela. Ai-je manqué quelque chose?
Edit: Je suppose que je n'étais pas assez clair. Je ne pense pas que je veux inverser la fusion, parce que je vais perdre les changements que je faisais veux faire! Dites cela fileA
et fileB
ont tous deux été modifiés mais je voulais seulement m'engager fileA
; taper accidentellement
svn commit -m "small change"
valide les deux fichiers, et maintenant je veux revenir en arrière fileB
. La fusion inversée ne facilite pas cette tâche (pour autant que je sache) que les étapes décrites ci-dessus.
Réponses:
ou
Les deux commandes sont équivalentes .
la source
svn merge -c -854 my.file
, et puis le fairesvn diff
, il semble afficher une révision avant 854 (c'est-à-dire 853 ); seulement quand je le faissvm merge -c 854 myfile
(sans le-
), il semble que mon fichier est revenu à la rév 854. Merci encore, bravo!Consultez la section « Annulation des modifications » du livre svn
la source
désolé d'utiliser un peu d'espace sur juste une réitération de la réponse précédemment donnée - mais c'est quelque chose avec lequel je finis toujours par avoir des problèmes.
Disons que j'ai mis à jour les fichiers locaux avec la dernière révision, qui est 854. Ensuite, je voudrais obtenir une révision plus ancienne - la version du fichier de quelques révisions plus tôt, disons la révision 851.
La copie fonctionnerait:
.. cependant, je ne peux pas être dérangé de chercher l'URL du dépôt :)
La mise à jour pourrait apparemment fonctionner:
... cependant, il marque également la copie locale comme "fraîchement extraite", ou plutôt "identique à la révision en ligne" (c'est-à-dire que dans Tortoise / RabbitVCS vous obtenez une coche verte OK) - ce qui signifie que vous ne pouvez pas faire
svn ci -m "rolled back to r 851"
: simplement parce que le localsubversion
l'exécutable ne remarquera aucun changement local et ne sera pas dérangé de télécharger quoi que ce soit dans le référentiel en ligne.Et, comme déjà répondu, la fusion inversée fonctionne - mais dans ce cas, il ne faut pas se fier à la syntaxe des raccourcis; mais déclarez spécifiquement:
Je dois admettre - je ne comprendrais jamais que la phrase " Fusion inversée de r854 à r852 dans un fichier " signifie " Je viens de recevoir r851 de votre fichier, et j'ai écrasé tout ce que vous aviez précédemment localement - et il est marqué comme différent de la dernière révision en ligne, donc vous pouvez le vérifier en ligne en tant que nouvelle révision " rollback" ", mais je suppose (et j'espère :)) que c'est ce qu'il fait :)
Après cela, on peut utiliser
svn diff
pour s'assurer rapidement que nous avons récupéré la bonne révision localement; et aussi, le fichier sera marqué d'un point d'exclamation rouge dans Tortoise / RabbitVCS (c'est-à-dire différent de la dernière version validée), etsvn ci -m "rolled back to r 851"
pourra donc s'exécuter cette fois.Notez également que si, finalement, vous changez d'avis après la fusion inversée ( c'est-à-dire que vous voulez quand même continuer à travailler sur la dernière révision HEAD, ici 854 - après que vous êtes revenu à 851 localement, mais que vous n'avez pas encore validé la restauration. ), vous ne devriez pas utiliser
svn up
, car il dira simplement qu'il est déjà " A la révision 854 "; utiliser à la placesvn revert --recursive .
ou similaire ...À votre santé!
Réf: Comment annuler les modifications à l'aide de Subversion - Jacob Wright - Flex, AIR, PHP, etc.
EDIT: ... et apparemment, exactement le même effet que
svn merge -r HEAD:851 l3toks.dtx
, peut être obtenu avec:la source
--force
pour écraser les répertoires. N'oubliez pas qu'il écrasera toutes les modifications.svn export
- est-ce que je manque quelque chose ou est-ce que cela n'est tout simplement pas implémenté dans ces interfaces graphiques?J'ai récemment dû revenir à une révision particulière pour déboguer une ancienne version et cela a fonctionné comme par magie:
J'ai dû résoudre tous les conflits en utilisant l'option "tc" car je ne me souciais pas des changements locaux (vérifié tout ce qui m'intéressait avant de revenir)
Revenir à la révision principale était aussi simple:
la source
Ce que vous recherchez s'appelle une "fusion inversée". Vous devriez consulter la documentation concernant la fonction de fusion dans le livre SVN (comme luapyad, ou plus précisément le premier commentateur de ce post, le souligne). Si vous utilisez Tortoise, vous pouvez également simplement aller dans la vue du journal et cliquer avec le bouton droit de la souris et choisir «annuler les modifications de cette révision» sur celle où vous avez commis l'erreur.
la source
La fusion inversée est exactement ce que vous voulez (voir la réponse de luapyad). Appliquez simplement la fusion au fichier commis par erreur au lieu de tout le répertoire.
la source
Si vous souhaitez uniquement annuler la dernière consignation, vous pouvez utiliser les éléments suivants
De cette façon, vous n'avez pas à rechercher les numéros de version actuelle et précédente.
la source
svn merge fusionnera les révisions, ne les annulera pas. c'est-à-dire que si vous avez un ajout dans votre version HEAD, fusionnez-le avec une révision précédente, le changement persistera.
J'utilise svn cat puis je le redirige dans le fichier:
Ensuite, vous avez le contenu 851 dans ce fichier et vous pouvez le réintégrer.
la source
Si vous utilisez l' IDE Eclipse avec le plugin SVN, vous pouvez procéder comme suit:
Cela rétablira les fichiers à la révision souhaitée. Gardez simplement à l'esprit que SVN verra les changements comme un nouveau commit. Autrement dit, la modification reçoit un nouveau numéro de révision et il n'y a aucun lien entre l'ancienne révision et la nouvelle. Vous devez spécifier dans les commentaires de validation que vous rétablissez ces fichiers vers une révision spécifique.
la source