Слияние требуется только в том случае, если вы зафиксировали также и в своем хранилище. Если вы делитесь хранилищем со своим другом, он фиксирует один или несколько раз, пока вы ничего не делаете, когда он сделал, все, что вам нужно сделать, это вытащить и обновить, без слияния.
Если вы сделали локальные коммиты, вот как разворачивается сценарий:
local: 1---2---3---4
central: 1---2---3---4
friend: 1---2---3---4
Он совершает:
local: 1---2---3---4
central: 1---2---3---4
friend: 1---2---3---4---5---6
Вы совершаете:
local: 1---2---3---4---X---Y
central: 1---2---3---4
friend: 1---2---3---4---5---6
Он толкает:
local: 1---2---3---4---X---Y
central: 1---2---3---4---5---6
friend: 1---2---3---4---5---6
Вы тянете:
local: 1---2---3---4---X---Y
\
+-5---6
central: 1---2---3---4---5---6
friend: 1---2---3---4---5---6
Вы объединяете:
local: 1---2---3---4---X---Y---7
\ /
+-5---6-+
central: 1---2---3---4---5---6
friend: 1---2---3---4---5---6
Затем вы нажимаете, и он тянет, и все хранилища идентичны.
Однако, если вы ничего не сделали, пока он работал над проектом, вот как разворачивается этот сценарий:
local: 1---2---3---4
central: 1---2---3---4
friend: 1---2---3---4
Он совершает:
local: 1---2---3---4
central: 1---2---3---4
friend: 1---2---3---4---5---6
Он толкает:
local: 1---2---3---4
central: 1---2---3---4---5---6
friend: 1---2---3---4---5---6
Вы тянете и обновляете:
local: 1---2---3---4---5---6
central: 1---2---3---4---5---6
friend: 1---2---3---4---5---6
Причина, по которой это отличается от того, как это делал Subversion, заключается в том, что с Subversion у вас был централизованный репозиторий, с которым все должны были общаться.
Таким образом, когда вы приступили к фиксации локальных изменений, клиент Subversion скажет: «Извините, вам нужно обновить, прежде чем вы сможете зафиксировать», и вам пришлось выполнить это обновление.
Если в этот момент вы изменили файлы, которые также изменились в центральном хранилище, Subversion объединит ваши локальные изменения с изменениями на сервере и обновит вашу точку ревизии вплоть до подсказки. Если бы не было конфликтов, это было бы тихим слиянием, иначе вы бы получили конфликты слияния.
Mercurial делает то же самое, за исключением того, что слияние не молчит. Вы можете фиксировать оба по отдельности, в своих локальных репозиториях, не общаясь друг с другом, но когда вы пытаетесь объединить все изменения в одном общем репозитории, вам нужно объединить. Mercurial никогда не изменяет существующие наборы изменений (если вы не используете некоторые расширения для редактирования истории), поэтому он не может просто автоматически определить, как ваши наборы изменений Parallell будут работать вместе.
Если вы двое не работали над одними и теми же файлами, или внесенные вами изменения в одни и те же файлы не вступают в конфликт друг с другом, то объединение выполняется всего несколькими щелчками мыши, и все готово.
В любом случае, у Mercurial есть много опций, но распределенная часть действительно меняет ваши взгляды на историю.