Acusei acidentalmente muitos arquivos em um repositório SVN e alterei algumas coisas que não pretendia. (Suspiro.) Para revertê-los ao estado anterior, o melhor que pude sugerir foi
svn rm l3toks.dtx
svn copy -r 854 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx
Eita! Não existe melhor maneira? Por que não consigo escrever algo assim:
svn revert -r 854 l3toks.dtx
Ok, estou apenas usando a v1.4.4, mas passei os olhos pela lista de alterações do ramo 1.5 e não consegui ver nada diretamente relacionado a isso. Eu perdi alguma coisa?
Edit: Eu acho que não estava claro o suficiente. Eu não acho que eu quero para reverter merge, porque então eu vou perder as mudanças que eu fiz querem fazer! Diga isso fileA
e fileB
ambos foram modificados, mas eu só queria confirmar fileA
; digitando acidentalmente
svn commit -m "small change"
confirma os dois arquivos e agora quero reverter fileB
. A mesclagem reversa torna essa tarefa não mais fácil (até onde eu sei) do que as etapas descritas acima.
Respostas:
ou
Os dois comandos são equivalentes .
fonte
svn merge -c -854 my.file
, e o façosvn diff
, parece mostrar uma revisão antes do 854 (ou seja, 853 ); somente quando eu façosvm merge -c 854 myfile
(sem o-
), parece que meu arquivo é revertido para rev 854. Obrigado novamente, felicidades!Confira a seção " desfazendo alterações " do livro svn
fonte
desculpe-me por usar um pouco de espaço apenas em uma reiteração da resposta dada anteriormente - mas isso é algo com o qual sempre acabo tendo problemas.
Digamos que atualizei os arquivos locais para a revisão mais recente, que é 854. Então, gostaria de obter uma revisão mais antiga - a versão do arquivo de poucas revisões anteriores, digamos a revisão 851.
A cópia funcionaria:
.. no entanto, não posso ser incomodado grepping para o URL do repo :)
A atualização aparentemente pode funcionar:
... no entanto, também marca a cópia local como "recém-finalizada", ou melhor, "igual à revisão on-line" (ou seja, no Tortoise / RabbitVCS você recebe uma marca de seleção verde OK) - o que significa que você não pode fazer
svn ci -m "rolled back to r 851"
: simplesmente porque o localsubversion
O executável não notará nenhuma alteração local e não será obrigado a fazer upload de nada para o repositório online.E, como já respondemos, a mesclagem reversa funciona - mas, neste caso, não se deve confiar na sintaxe do atalho; mas especifique especificamente:
Devo admitir - nunca entenderia a frase " fusão reversa de r854 a r852 em arquivo " como " Acabei de obter o r851 do seu arquivo e sobrescrito o que você tinha anteriormente localmente - e está marcada como diferente da última revisão on-line, então você pode verificar on-line novamente como uma nova revisão de " reversão" ", mas acho que (e espero :)) é isso que faz :)
Depois disso, pode-se usar
svn diff
para uma rápida verificação se obtivemos a revisão correta localmente; e também, o arquivo será marcado com um ponto de exclamação vermelho no Tortoise / RabbitVCS (ou seja, diferente da última versão confirmada) e, portanto,svn ci -m "rolled back to r 851"
poderá ser executado dessa vez.Além disso, observe que, se você finalmente mudar de idéia após a mesclagem reversa ( ou seja, de qualquer forma, você deseja continuar trabalhando na revisão HEAD mais recente, aqui 854 - depois de voltar para o 851 localmente, mas ainda não cometeu a reversão). ), você não deve usar
svn up
, porque simplesmente diz que já está " Na revisão 854 "; use em vez dissosvn revert --recursive .
ou similar ...Felicidades!
Ref: Como reverter alterações usando o Subversion - Jacob Wright - Flex, AIR, PHP, etc.
EDIT: ... e, aparentemente, o mesmo efeito que
svn merge -r HEAD:851 l3toks.dtx
pode ser alcançado com:fonte
--force
para substituir diretórios. Lembre-se de que ele substituirá as alterações.svn export
- estou perdendo alguma coisa ou isso simplesmente não foi implementado nessas GUIs?Recentemente, tive que reverter para uma revisão específica para depurar uma versão mais antiga e isso funcionou como mágica:
Tive que resolver todos os conflitos usando a opção "tc", pois não me importava com as alterações locais (fiz o check-in de tudo o que me importava antes de reverter)
Voltar à revisão também era simples:
fonte
O que você está procurando é chamado de "mesclagem reversa". Você deve consultar os documentos sobre a função de mesclagem no livro SVN (como luapyad, ou mais precisamente o primeiro comentarista dessa publicação, aponta). Se você estiver usando o Tortoise, também poderá acessar a visualização de log e clicar com o botão direito do mouse e escolher "reverter alterações desta revisão" na que cometeu o erro.
fonte
A mesclagem reversa é exatamente o que você deseja (consulte a resposta de luapyad). Basta aplicar a mesclagem ao arquivo confirmado erroneamente, em vez de ao diretório inteiro.
fonte
Se você quiser desfazer apenas o último check-in, poderá usar o seguinte
Dessa forma, você não precisa procurar os números das versões atual e anterior.
fonte
svn merge mesclará revisões, não as reverterá. ou seja, se você tiver alguma adição na sua versão HEAD, mesclar isso com uma revisão anterior, a alteração persistirá.
Eu uso o svn cat e depois o redireciono para o arquivo:
Você tem o conteúdo 851 desse arquivo e pode fazer o check-in novamente.
fonte
Se você usar o IDE Eclipse com o plug - in SVN, poderá fazer o seguinte:
Isso reverterá os arquivos para a revisão que você deseja. Lembre-se de que o SVN verá as alterações como um novo commit. Ou seja, a alteração obtém um novo número de revisão e não há vínculo entre a revisão antiga e a nova. Você deve especificar nos comentários de confirmação que está revertendo esses arquivos para uma revisão específica.
fonte