GIT: Как я могу предотвратить слияние фокстрота в моей «основной» ветке?

Фокстрот слияния - это слияние, в котором «origin / master» сливается как 2-й (или более поздний) родитель, например:

Коммит 'D' является слиянием фокстрот, потому что 'origin / master' является его вторым родителем. Обратите внимание, что история первого родителя из 'origin / master' содержит коммит 'B' в данный момент.

Но в моем git-репо мне нужны все слияния с участием origin / master, чтобы сохранить origin / master в качестве первого родителя. К сожалению, git не заботится о порядке родителей, когда он оценивает, подходит ли коммит для ускоренной перемотки вперед. Это приводит к тому, что первая родительская история в моей главной ветке иногда теряет коммиты, которые были там (например, вывод «git log --first-parent»).

Вот что происходит, когда выдвигается коммит 'D' из предыдущей диаграммы:

Как я могу предотвратить этот толчок? История первого родителя 'origin / master' больше не содержит коммита 'B' после того, как слияние фокстрота было выполнено!

Очевидно, что никакие коммиты или работа на самом деле не потеряны, просто в моей среде мне действительно нужно, чтобы git log --first-parent был стабильной накопительной записью коммитов - если хотите, своего рода «Write-Once Read-Many» "(WORM) база данных. У меня есть сценарии и процессы, которые используют «git log --first-parent» для создания журналов изменений и заметок о выпуске, а также для управления переходами билетов в моей системе создания билетов (JIRA). Слияния Фокстрот нарушают мои сценарии!

Есть ли какой-нибудь хук предварительного получения, который я мог бы установить в своих репозиториях git, чтобы предотвратить слияние фокстрот?

постскриптум Графики фиксации в этом вопросе stackoverflow были сгенерированы с использованиемhttp://bit-booster.com/graph.html.

Ответы на вопрос(3)

Ваш ответ на вопрос