Давайте посмотрим, как отличаются «обновление» и «слияние»:
Предположим, что история изменений репозитория X выглядит следующим образом:
...->2707->2708->2709->2710->2711
2711 - номер последней редакции X.
Может быть ошибка, которая была введена где-то между ревизиями 2708 и 2711. Вы знаете, что эта ошибка не существовала в ревизии 2707. Она могла быть введена в 2708, 2709, 2710 или 2711. По сути, вам интересно знать, какой коммит введен баг.
Один из способов сделать это - вернуться (откатиться) к изменениям в вашем локальном репозитории по каждому из этих номеров ревизий и проверить, существует ли ошибка до сих пор. Предположим, например, что ошибка была введена в ревизии 2709. Вы можете откатить свои коммиты с помощью следующих команд:
$ svn update -r 2710
Ошибка все еще существует ...
$ svn update -r 2709
Ошибка все еще существует ...
$ svn update -r 2708
Ошибка не существует. Это подразумевает, что ревизия 2709 вызвала ошибку.
Тем не менее, вы могли бы в равной степени,
$ svn merge -r 2711:2708
Единственное различие между ними состоит в том, что svn update будет поднимать флаги, если будут локальные изменения, и сообщать вам. Вы можете принять эти изменения или вернуться назад, чтобы при запуске svn diff
никаких изменений не было. С другой стороны, svn merge разрешит различия между локальной копией и хранилищем. Полезно, что они все равно будут делать то же самое, но здесь они демонстрируют только поведенческие различия.