A maioria das respostas anteriores usa uma mesclagem reversa, e essa geralmente é a resposta certa. No entanto, há uma situação (que acabou de acontecer comigo) em que não está.
Alterei acidentalmente um arquivo com finais de linha Unix para finais de linha do DOS ao fazer uma pequena alteração e o confirmei. Isso é facilmente desfeito, alterando as terminações da linha e confirmando novamente, ou por uma mesclagem reversa, mas tem o efeito de tornar a svn blame
lista minha edição como a fonte de todas as linhas do arquivo. (Curiosamente, o TortoiseSVN no Windows não é afetado por isso; apenas a linha de comando svn blame
.)
Se você deseja manter o histórico, conforme relatado por svn blame
, acho que você precisa fazer o seguinte:
- Exclua o arquivo e confirme.
- No repositório, copie a cópia boa anterior do arquivo na cabeça e confirme.
- Restaure as edições que você deseja manter.
A exclusão é um pouco assustadora, mas lembre-se de que você sempre tem o arquivo salvo no repositório, portanto, restaurá-lo não é grande coisa. Aqui está um código para ilustrar as etapas. Suponha que esse xxx
seja o número de revisão da última cópia válida.
svn rm svn+ssh://path/to/file
svn copy svn+ssh://path/to/file@xxx svn+ssh://path/to -m"Restore good copy"
svn update
<restore the edits>
svn commit -m"Restore edits"
Observe que, para uma cópia no repositório, o destino precisa ser um diretório, não um nome de arquivo.