Давайте представим, что у нас есть master
филиал.
Затем мы создаем newbranch
git checkout -b newbranch
и сделать два новых коммита newbranch
: commit1 и commit2
Затем мы переключаемся на мастера и делаем cherry-pick
git checkout master
git cherry-pick hash_of_commit1
Посмотрев, gitk
мы видим, что commit1 и его выбранная версия имеют разные хэши, поэтому технически это два разных коммита.
Наконец мы сливаемся newbranch
в master
:
git merge newbranch
и увидите, что эти два коммита с разными хешами были объединены без проблем, хотя они подразумевают, что одни и те же изменения должны применяться дважды, поэтому один из них должен потерпеть неудачу.
Действительно ли git проводит интеллектуальный анализ содержимого коммита при слиянии и решает, что изменения не должны применяться дважды, или эти коммиты помечаются внутри как связанные вместе?
источник
После такого слияния у вас могут быть дважды выбранные в истории коммиты.
Решение, чтобы предотвратить это, я цитирую из статьи, которая рекомендует для веток с дублированием (вишня) выбирает rebase перед слиянием:
РЕДАКТИРОВАТЬ Исправления, предполагаемые комментарием Дэвида Лемон
источник
---Y---b2'---b4'