Как реинтегрировать тематические ветки после сквоша и слияния? - PullRequest
0 голосов
/ 30 октября 2019

Я обычно полностью принимаю слияния в git, но недавно я начал работать с репозиторием, где стратегия слияния веток тем в master заключалась в том, чтобы раздавить их в один коммит.

Я только что обнаружил, что это вызываетполный хаос при попытке реинтегрировать вторую ветку темы, основанную на первой.

Допустим, у меня есть:

A-I'          master
 \
  B-C-E-G-I   topicA
     \   \
      D-F-H-J topicB

Где I' - это сжатое слияние от topicA доmaster.

Если я сливаю master в topicB, тогда возникает много конфликтов. Использование инструмента слияния бесполезно, поскольку LOCAL будет включать изменения с ABCDEFGHJ, REMOTE будет ABCEGI, а BASE - A. Попытка увидеть различия I против DFHJ может быть очень сложной. Если я отказываюсь от инструмента слияния и просто различаю LOCAL и REMOTE, тогда изменения становятся намного более очевидными, но я должен вручную разрешить все конфликты.

Если я перебазирую topicB на master, тогда он получаетеще более странно, поскольку различные файлы меняются между B и I на topicA, и поэтому повторное применение коммитов ABCDFJ на I' создает бессмыслицу.

Как мне получить I' в topicB?

Есть ли лучший способ интегрировать ветки тем, чтобы избежать этого в будущем?

1 Ответ

0 голосов
/ 30 октября 2019

Меньшее зло оказалось:

git rebase --onto origin/master topicA topicB

Я не обращал слишком много внимания на применение коммитов, но я предполагаю, что коммиты слияния (H) были потеряны.

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

Мне бы очень хотелось услышать, как другие решают эту проблему, поскольку, похоже, что FUD вокруг объединяющихся людей склоняется к перебазированию в качестве «более простого» рабочего процесса.

...