Перебазирование в общей ветке, когда все перебазируют - PullRequest
0 голосов
/ 30 января 2019

Я прочитал онлайн, что команда rebase не должна выполняться в публичной ветке.У меня есть следующий сценарий:

master с коммитами A1 <- A2 <- A3 <br>stable, разветвленными от master на A1, с коммитом B1
dev1, разветвленными от stable в B1 и имеет коммиты C1 <- C2 <- C3 <br>dev2, разветвленные от dev1 в C2 и имеющие коммиты D1 <- D2 </p>

Теперь, если я хочу обновить stable сmaster, я запускаю git rebase master и делаю принудительный толчок.Теперь dev1 делает перебазировку поверх stable, чтобы получить обновления master, а dev2, требующий как master, так и dev1, делает перебазировку поверх dev1.

В этом сценарии можно ли запускать команду rebase в ветвях stable, dev1 и dev2, пока я выполняю заказ?Если это не так, тогда как можно объединить последние master с stable и последние master, dev1 обновления с dev2?Единственное, о чем я могу подумать, это создать запрос на извлечение, merge код и затем выполнить повторную ветвь.Это лучшая альтернатива или мне чего-то не хватает?

1 Ответ

0 голосов
/ 30 января 2019

С Git 2.18 + вам не нужно делать все эти ребазы: только один:

git checkout stable
git rebase --rebase-merges master

dev1 и dev2 также должны быть перебазированы: вывам нужно будет сбросить ваши локальные ветви на эти новые перебазированные ветки HEAD.

В вашем случае, если вы установили локальные ветви для master, stable, dev1 и dev2, это означает толькоодна перебазировка (из stable) перебазирует все связанные ветки (dev1 и dev2)

--x--x--x--x (master)
      \
       s--s--s (stable)
              \
               d--d (dev1)
                   \
                    d--d (dev2)

A git checkout stable; git rebase --rebase-merges master сделает:

--x--x--x--x (master)
            \
             s'--s'--s' (stable)
                      \
                       d'--d' (dev1)
                            \
                             d'--d' (dev2)

Нет необходимостиперебазировать stable, затем dev1, затем dev2!

...