#version-control #mercurial
#контроль версий #непостоянный
Вопрос:
Я работаю в Mercurial и недавно перенес несколько наборов изменений в репозиторий. Другой человек слился и передал свои материалы.
На данный момент в одном из моих файлов были внесены изменения, которые были потеряны в процессе слияния. Я отследил файлы, чтобы увидеть, где произошло удаление кода, но я не могу найти ни одного случая, когда строки были явно удалены.
Кто-нибудь знает, что могло здесь произойти? Я посмотрел, и 1 набор изменений выше моего не включает код. Это был набор изменений при слиянии hg.
Комментарии:
1. Во время ручного слияния слияние может удалить и неконфликтную часть кода. вам поможет hg diff. Используйте два -r или -c <набор слияний> -r <ваш родительский элемент>
2. Можете ли вы найти редакцию, в которой существовали эти правки? или вы имеете в виду, что у вас были изменения в вашей рабочей копии, когда было выполнено слияние?
Ответ №1:
Ни одна строка кода, которая была зафиксирована, никогда не теряется.
Слияние — это просто фиксация с двумя родителями — слияние может включать или удалять любой код из любого родителя.
Сложность заключается в том, что обычные команды, используемые для определения того, где мог быть удален код ( hg log -p
например), сравнивают набор изменений с его левым родительским элементом, поэтому вы увидите добавления и удаления только относительно этого родительского элемента.
Если, например, история выглядит следующим образом:
[A]--[B]--[D]
/
-[C]-
(где A является родительским для обоих B и C, а D имеет двух родителей B и C)
Если изменение было добавлено в B, но левым родительским элементом D является C, а правым родительским элементом D является B, то при запуске hg log -p
для просмотра исправлений вы видите:
- A по сравнению с ничем
- B по сравнению с A <— показывает добавленное вами изменение
- C по сравнению с
- D по сравнению с C
Ни один из них не покажет удаление вашего изменения. Чтобы увидеть, что вам нужен D по сравнению с B, который вы получили бы с:
hg diff -r B -r D
Итак, человек, который слился, выбросил ваш код, и вы можете немного покопаться в доказательствах.
Комментарии:
1. разве этого не должно быть
hg diff -r B -r D
?