2009-12-13 43 views
41

Je viens de faire un svn merge fusionner les modifications du tronc à une branche:svn: Comment annuler une fusion (sans validation)?

$ svn merge -r328:HEAD file:///home/user/svn/repos/proj/trunk . 
--- Merging r388 through r500 into '.': 
A foo 
A bar 
    C baz1 
    C baz2 
U duh 
[...] 

Mais il y avait trop de conflits, donc je voudrais défaire cela.

Une façon de faire est de valider, puis de fusionner. Mais je ne peux pas commettre à cause des conflits. Quelle est la meilleure façon de défaire dans ce cas?

Répondre

7

Tant que vous ne vous êtes pas engagé, vous pouvez toujours revenir à annuler toutes vos modifications.

+0

Hmm, juste 'svn revert .' n'a rien fait. – Frank

+0

OK, alors vous devriez tout d'abord résoudre, puis faire le retour. – tangens

+6

... et comme @rq dit, n'oublie pas le drapeau -R pour faire le retour récursivement. – tangens

96

Revert récursive du haut de votre copie de travail:

svn revert -R .

Vous devrez supprimer manuellement les fichiers qui ont été ajoutés. Comme après un retour, les fichiers ajoutés restent sur le disque, mais ils seront dans un état non-suivi (« foo? »)

+2

Cette commande rétablira également toutes les modifications locales qui existaient avant que vous ayez fait la fusion si correcte? – NeilMonday

+4

@NeilMonday true, mais vous ne devriez pas fusionner dans une copie de travail avec des modifications locales non liées à la fusion. – richq

-11

Il suffit de faire svn resolve sur tous les conflits de toute façon et COMMIT:

$ svn resolved baz1 
$ svn resolved baz2 
$ svn ci -m "oops. bad merge. will revert." 
Transmitting file data ...... 
Committed revision 501. 

Ensuite, , annuler officiellement en fusionnant au niveau où il était:

$ svn merge -r501:500 
--- Reverse-merging r319 into '.': 
[...] 

Ca y est, la fusion a été annulée dans le répertoire. Maintenant que commit aussi:

$ svn ci -m "bad merge has been undone" 
Transmitting file data ...... 
Committed revision 502. 

L'avantage par rapport à la méthode svn revert -R . est que les fichiers qui ont été ajoutés sont tous correctement supprimés.

+0

Je l'ai trouvé moi-même, alors je réponds à ma dernière question. :) – Frank

+13

Ceci est totalement * pas * comme vous auriez dû le faire! – richq

+3

Vous ne voulez pas vraiment vomir des marqueurs de conflit dans l'historique * permanent * de votre dépôt, n'est-ce pas? Yuck. – bendin

2

Je faisais face à la même situation, j'avais aussi d'autres changements que je ne voulais pas perdre. Ainsi, au lieu de la pleine revert récursive juste svn revert pour les articles conflictuel était bon pour moi

svn revert baz1 baz2 
Questions connexes