Как отменить слияние (без фиксации)?
Я просто сделал svn merge
, чтобы слить изменения из соединительной линии в ветку:
$ 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
[...]
Но было слишком много конфликтов, поэтому я хотел бы отменить это.
Один из способов сделать это - зафиксировать и затем слить обратно. Но я не могу совершать из-за конфликтов. Какой лучший способ отменить в этом случае?
Ответы
Ответ 1
Восстановить рекурсивно из верхней части рабочей копии:
svn revert -R .
Вам нужно будет вручную удалить файлы, которые были добавлены. Как и после восстановления, добавленные файлы будут оставаться на диске, но они будут находиться в состоянии без отслеживания ( "? Foo" )
Ответ 2
Пока вы не совершили ошибку, вы всегда можете сделать возврат, чтобы отменить все ваши изменения.
Ответ 3
Я столкнулся с такой же ситуацией, также у меня были некоторые другие изменения, которые я не хотел потерять.
Итак, вместо полного рекурсивного возврата только svn revert
для конфликтующих элементов было хорошо для меня
svn revert baz1 baz2
Ответ 4
Просто сделайте svn resolve
для всех конфликтов и выполните:
$ svn resolved baz1
$ svn resolved baz2
$ svn ci -m "oops. bad merge. will revert."
Transmitting file data ......
Committed revision 501.
Затем, официально отмените его, спустившись туда, где он был:
$ svn merge -r501:500
--- Reverse-merging r319 into '.':
[...]
Что это, слияние было отменено в каталоге. Теперь также зафиксируйте это:
$ svn ci -m "bad merge has been undone"
Transmitting file data ......
Committed revision 502.
Преимущество над методом svn revert -R .
заключается в том, что файлы, которые были добавлены, удалены должным образом.