Как избежать конфликтов слияния при объединении нескольких ветвей?

#git #github

#мерзавец #github

Вопрос:

Для нашего проекта у нас есть main филиал. Каждый из нас также работает над своими собственными функциональными ветвями. Пару раз я создавал, скажем feature1 , ветку функций main , заканчивал, отправлял ее на GitHub и создавал запрос на извлечение. Прежде чем запрос на вытягивание будет одобрен, я уже вышел из feature1 into feature2 и работаю над чем-то новым. Затем я отправляю его на GitHub и снова делаю запрос на вывод. Когда мой первый запрос на вытягивание, feature1 , получает одобрение, я затем получаю конфликты слияния feature2 .

  1. Почему это происходит? Я ничего не изменил feature1 , просто добавил поверх этого.
  2. Есть ли правильный способ решить эту проблему? Я попытался перебазировать, но это был очень долгий и утомительный процесс с устранением проблем при каждой фиксации.
  3. Я подумал , что, может быть, вместо того, чтобы делать запрос на извлечение из feature2 into main , он должен быть внутри feature1 . Это все исправит?
  4. Есть ли лучшая практика для выполнения того, чего мы пытаемся достичь?

Комментарии:

1. После слияния feature1 вы должны перебазировать свою ветвь fetaure2 на master.

Ответ №1:

Используете ли вы «слияние сквоша» или «перебазирование и перемотка вперед» при объединении ваших запросов на масло?

Если да, то либо:

  • Прекратите использовать это и используйте «истинное слияние» / «фиксацию слияния»; или
  • Никогда не создавайте новую ветвь на основе несогласованного запроса на извлечение

Причина в том, что всякий раз, когда вы сжимаете или перебазируете ветвь, вы отбрасываете фиксации, которые изначально были в этой ветви, и создаете новые, не имеющие зарегистрированной связи с оригиналами. Если вы основали более позднюю работу на этих исходных коммитах, git считает, что эти коммиты все еще не объединены, и когда вы пытаетесь объединить более позднюю работу, он пытается применить уже внесенные изменения, что в значительной степени гарантирует некоторые запутанные конфликты.

Вы можете воссоздать вторую ветвь, переназначив ее на сжатые / переназначенные коммиты в main, но чем чаще вы «связываете» ветви вместе (начиная с предыдущей функции, а не основной), тем больше работы вы делаете для себя, синхронизируя их.

Если вы используете истинное слияние, git знает, как связаны ветви, и не следует применять одни и те же изменения дважды.