Нет способа сделать то, что вы хотите.
Когда Git выполняет слияние, он вычисляет базу слияния, которая составляет примерно общий коммит предков обоих ветви. Три (и только) три точки, рассматриваемые в типичном слиянии, - это основа слияния и две головы. Если вы выполните обычное слияние, то вы создадите новый коммит в основной ветви, и этот коммит или один из его потомков обычно будут использоваться в качестве базы слияния в будущем, что означает, что Git не учитывает ваш изменяется во второй раз.
Если вы выполняете слияние sh, то база слияния является исходной точкой разветвления, поэтому при последующих слияниях вы увидите, что вы сделали несколько коммитов с одинаковыми изменениями, что вызывает конфликты, подобные вам '
Если вы не используете собственный драйвер слияния, вы не сможете настроить обнаружение базы слияния, поэтому вам нужно принять другое решение или научиться справляться с конфликтами.
Что вы Можно удалить существующую ветку и воссоздать ее из ветви master
(или просто сбросить до последней фиксации на master
), что будет означать, что будущая работа будет основана на фиксации, включая всю предыдущую работу. Это позволит избежать конфликтов.
Вы также можете использовать стандартное слияние вместо слияния sh, которое позволит обнаружению базы слияния делать правильные вещи.
Наконец, вы можете написать собственный драйвер слияния, который каким-то образом интуитивно понятен информации о вашей ветке. Я бы не рекомендовал этот подход, потому что он требует много работы, и очень легко ошибиться и испортить все ваши данные.
Но в конечном итоге, учитывая ваши ограничения рабочего процесса, вариантов не так много. тебе. Я лично предлагаю другой, более стандартный рабочий процесс с меньшими ограничениями; логические, независимые коммиты; и стандартная политика слияния.