Например, если вы хотите объединить большинство, но не все коммиты на ветке "maint" с "master", вы можете сделать это. Это требует некоторой работы - как упоминалось выше, обычный вариант использования - объединение всего из ветки - но иногда случается, что вы внесли изменение в версию выпуска, которая не должна быть интегрирована обратно (возможно, этот код был уже заменен в мастере), так как вы это представляете? Здесь идет ...
Итак, давайте предположим, что к maint применено 5 изменений, и одно из них (maint ~ 3) не должно быть объединено с master, хотя все остальные должны быть. Вы делаете это в три этапа: на самом деле объединяйте все до этого, говорите git пометить maint ~ 3 как слитые, даже если это не так, а затем объедините остальные. Магия это:
bash <master>$ git merge maint~4
bash <master>$ git merge -s ours maint~3
bash <master>$ git merge maint
Первая команда объединяет все до вашей проблемной фиксации в мастере. Сообщение в журнале слияния по умолчанию объяснит, что вы объединяете "ветку 'maint' (ранняя часть)".
Вторая команда объединяет проблемный коммит maint ~ 3, но опция "-s ours" говорит git использовать специальную "стратегию слияния", которая, фактически, работает, просто сохраняя дерево, с которым вы сливаетесь, и игнорируя коммит (ы) вы полностью слились. Но он все еще делает новый коммит слияния с HEAD и maint ~ 3 в качестве родителей, поэтому график изменений теперь говорит, что maint ~ 3 объединен. Так что на самом деле вы, вероятно, захотите использовать опцию -m и для «git merge», чтобы объяснить, что этот коммит maint ~ 3 фактически игнорируется!
Последняя команда просто объединяет оставшуюся часть maint (maint ~ 2..maint) с master, чтобы вы снова синхронизировались.