Как перегрузить мою ветку свойств в ветку развития в git с наименьшими возможными конфликтами?

У меня есть ветвь моей функции, которая превысила около 30 или более баллов. Между тем в отделе развития несколько других функций были отброшены у других разработчиков. Поэтому каждый раз, когда публикуется новая функция для разработки, меня спрашивают:

  • Разверните ветвь разработки на моей ветке свойств.
  • Устранение конфликтов, если есть
  • Продолжайте развиваться в своей ветке функций.

Проблема

Второй шаг - это куриная шея. При перезагрузке это дает мне конфликт для каждого фиксации этой ветки. Это действительно итеративно и избыточно. Обратите внимание: я не могу всегда переустанавливать ветвь разработки сразу же после того, как моя собственная работа в моей ветке продолжается.

Что я пробовал?

  • В squash и максимально уменьшите мои коммиты (но это помогает в наименьшей степени, так как в большинстве случаев нет ничего, чтобы сквош)
  • В stash мои текущие изменения, а также перестроить разработку, а затем разблокировать мои изменения. (но здесь я тоже получаю конфликты)
  • Использование -preserve-merges с rebase. (но все здесь кричат, что использование этого полностью обескуражено)

Итак, каков оптимальный подход при работе с перераспределением разработки на ветку функций с наименьшими конфликтами, когда сама ветвь функции имеет множество коммитов. Я свежее, и поэтому ответ с полезным объяснением (или ссылкой) будет очень полезен.

Ответ 1

Рабочий процесс звучит (rebase).
Но конфликты не должны решаться каждый раз снова и снова.

Для этого у вас git rerere: активируйте его (git config --global rerere.enabled true), разрешите конфликт в последний раз (или выполните перепрограммирование вручную или использовать contrib/rerere-train.sh), и следующая перебаза будет повторно использовать разрешение конфликтов на вашем следующая перезагрузка.

Ответ 2

Я предлагаю сохранить вашу функцию небольшим (один или два дня), а ваша ветка функций также будет небольшой. Другим способом было бы переупаковать не каждый раз, когда что-то попадало в ветвь развития, а только иногда, или только раз перед слиянием. Опять же вам нужно, чтобы функция была небольшой или у вас было слишком много конфликов сразу.

О вашем вопросе вы не можете свести к минимуму количество конфликтов в перестановке. Если есть конфлики, вы не можете их избежать.

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

Вы можете включить reerere глобально с помощью

git config --global rerere.enabled true

Ответ 3

Попробуйте git merge из ветки разработки в ветвь функции перед выполнением git rebase. Это будет более информативным на этом пути.