#git #github
#мерзавец #github
Вопрос:
Для нашего проекта у нас есть main
филиал. Каждый из нас также работает над своими собственными функциональными ветвями. Пару раз я создавал, скажем feature1
, ветку функций main
, заканчивал, отправлял ее на GitHub и создавал запрос на извлечение. Прежде чем запрос на вытягивание будет одобрен, я уже вышел из feature1
into feature2
и работаю над чем-то новым. Затем я отправляю его на GitHub и снова делаю запрос на вывод. Когда мой первый запрос на вытягивание, feature1
, получает одобрение, я затем получаю конфликты слияния feature2
.
- Почему это происходит? Я ничего не изменил
feature1
, просто добавил поверх этого. - Есть ли правильный способ решить эту проблему? Я попытался перебазировать, но это был очень долгий и утомительный процесс с устранением проблем при каждой фиксации.
- Я подумал , что, может быть, вместо того, чтобы делать запрос на извлечение из
feature2
intomain
, он должен быть внутриfeature1
. Это все исправит? - Есть ли лучшая практика для выполнения того, чего мы пытаемся достичь?
Комментарии:
1. После слияния feature1 вы должны перебазировать свою ветвь fetaure2 на master.
Ответ №1:
Используете ли вы «слияние сквоша» или «перебазирование и перемотка вперед» при объединении ваших запросов на масло?
Если да, то либо:
- Прекратите использовать это и используйте «истинное слияние» / «фиксацию слияния»; или
- Никогда не создавайте новую ветвь на основе несогласованного запроса на извлечение
Причина в том, что всякий раз, когда вы сжимаете или перебазируете ветвь, вы отбрасываете фиксации, которые изначально были в этой ветви, и создаете новые, не имеющие зарегистрированной связи с оригиналами. Если вы основали более позднюю работу на этих исходных коммитах, git считает, что эти коммиты все еще не объединены, и когда вы пытаетесь объединить более позднюю работу, он пытается применить уже внесенные изменения, что в значительной степени гарантирует некоторые запутанные конфликты.
Вы можете воссоздать вторую ветвь, переназначив ее на сжатые / переназначенные коммиты в main, но чем чаще вы «связываете» ветви вместе (начиная с предыдущей функции, а не основной), тем больше работы вы делаете для себя, синхронизируя их.
Если вы используете истинное слияние, git знает, как связаны ветви, и не следует применять одни и те же изменения дважды.