Большинство ответов, похоже, о Subversion, так что здесь у вас есть один о Git (и других DVCS).
В распределенной системе контроля версий, когда вы объединяете одну ветку в другую, вы создаете новый коммит слияния , который запоминает, как вы разрешили слияние, а запоминает всех родителей слияния . Эта информация просто отсутствовала в Subversion до версии 1.5; для этого вам пришлось использовать дополнительные инструменты, такие как SVK или svnmerge. Эта информация очень важна при повторном объединении.
Благодаря этой информации распределенные системы контроля версий (DVCS) могут автоматически находить общего предка (или общих предков), также известного как база слияния, для любых двух ветвей. Посмотрите на схему изменений ASCII-арт ниже (надеюсь, что она не стала слишком ужасной),
---O---*---*----M---*---*---1
\ /
\---*---A/--*----2
Если мы хотим объединить ветвь '2' в ветвь '1', общим предком, который мы хотели бы использовать для генерации слияния, была бы версия (commit), помеченная как 'A'. Однако, если система контроля версий не записывает информацию о родителях слияния («M» является предыдущим слиянием тех же ветвей), она не сможет найти коммит «A» и найдет коммит «O». как общий предок (база слияния) вместо этого ... который будет повторять уже включенные изменения и приведет к большому конфликту слияния.
Распределенная система контроля версий должна была делать это правильно, то есть они должны были сделать слияние очень легким (без необходимости отмечать / помечать родителей слияния и предоставлять информацию о слиянии вручную) с самого начала, потому что это способ получить кого-то другого получить код в проекте - это не дать ему / ей доступ к коммиту, а извлечь из его / ее репозитория: получить коммиты из другого репозитория и выполнить слияние.
Вы можете найти информацию о слиянии в Subversion 1.5. в Замечания к выпуску Subversion 1.5 . Замечания: вам нужно разные (!) Опции для слияния ветки с транком, чем слияния транка в ветку, иначе. не все ветви равны (в распределенных системах контроля версий они [обычно] технически эквивалентны).