Относительно альтернатив
git checkout iphone -b iphone31
git merge master
и
git checkout master -b iphone31
git merge iphone
они будут иметь одинаковую легкость или сложность, это все равно что спорить, наполовину ли стакан или наполовину пуст.
Версия дерева восприятия
То, как мы смотрим на деревья версий, является в некотором роде нашим произвольным восприятием.
Допустим, у нас есть дерево версий, подобное следующему:
A----------+
| |
| |
\_/ \_/
B X
| |
| |
\_/ \_/
C Y
|
|
\_/
D
|
|
\_/
E
И скажем, мы хотим сделать новую версию Z проверенной из Y
основанный на изменениях от C до E, но не включая изменения, сделанные из
От А до С.
«О, это будет сложно, потому что нет единой отправной точки».
Ну не совсем. Если мы просто разместим объекты немного по-другому
в графическом макете, как это
/
C+---------+
| \ |
| |
\_/ |
D B
| / \
| |
\_/ |
E A
|
|
\_/
X
|
|
\_/
Y
сейчас все начинает выглядеть многообещающе. Обратите внимание, что я не
здесь изменилось любое отношение кораблей, все стрелки указывают так же, как
на предыдущей картинке и версии А все еще общая база.
Изменен только макет.
Но теперь тривиально представить себе другое дерево
C'---------+
| |
| |
\_/ \_/
D B'
| |
| |
\_/ \_/
E A
|
|
\_/
X
|
|
\_/
Y
, где задача состоит в том, чтобы просто объединить версию E.
Так что вы можете объединить все, что хотите, единственное, что влияет
легкость или сложность - это совокупность изменений, сделанных между
Вы выбираете в качестве отправной точки или общей базы, и где вы сливаетесь с.
Вы не ограничены использованием естественной отправной точки
инструмент управления версиями.
Это может быть непросто с некоторыми системами / инструментами контроля версий,
но если все остальное терпит неудачу там
ничто не мешает вам сделать это вручную
проверить версию C и сохранить файл как file1,
проверить версию E и сохранить файл как file2,
проверить версию Y и сохранить файл как file3,
и запустить kdiff3 -o merge_result file1 file2 file3
.
Ответ
Теперь для вашей конкретной ситуации сложно сказать, что именно
стратегия, которая будет производить наименьшее количество проблем, но
если есть много изменений, которые создают какой-то конфликт
вероятно, легче разделить и объединить меньшие части.
Мое предложение было бы
поскольку между последним и iphone есть 32 коммита,
Например, вы можете начать с ветвления мастера, а затем
объединить в первые 16 коммитов. Если это оказывается
слишком много проблем, вернитесь и попробуйте объединить 8 первых коммитов.
И так далее. В худшем случае вы в конечном итоге сливаете каждый из 32 коммитов по одному,
но это, вероятно, будет проще, чем справиться со всеми
накопленные конфликты в одной операции слияния (и
в этом случае вы работаете с действительно базой расходящегося кода).
Советы:
Нарисуйте на бумаге дерево версий и отметьте стрелками, что вы хотите
слияния. Вычеркните вещи, как они сделаны, если вы разделите процесс
в несколько шагов. Это даст вам более четкое представление о том, что вы хотите
чтобы достичь того, что вы уже сделали и что осталось.
Я действительно могу порекомендовать KDiff3 , это отличный инструмент сравнения / слияния.