Перебазировать ветку git и любые ветки между ней и целевой веткой - PullRequest
0 голосов
/ 11 апреля 2019

Скажем, у меня есть ветвь branch-1, основанная где-то в master, и другая ветвь branch-1a, которая основана на последнем коммите branch-1. Я хочу перебазировать branch-1 и branch-1a одновременно на вершину мастера.

Какой лучший способ сделать это?

Графически я хочу перейти от:

----o---o---o---o - master
     \
      o---o---o---o - branch-1a
           `branch-1

до

----o---o---o---o - master
                 \
                  o---o---o---o - branch-1a
                       `branch-1

Я знаю, что могу перебазировать branch-1a, а затем проверить branch-1 и принудительно сбросить его на правильный коммит, но это утомительно, и я надеялся, что может быть решение с одной командой.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2019

Я не знаю ни одной команды, чтобы перебазировать их все, но вы можете использовать --fork-point, чтобы упростить последующие перебазировки:

git checkout branch-1
git rebase master
git checkout branch-1a
git rebase --fork-point branch-1

Без --fork-point (или без ручной идентификации коммита, на который branch-1 указывал) вы увидите дублированные два коммита:

----o---o---o---o - master
                 \
                  x---y---x'---y'---o---o - branch-1a
                       `branch-1

--fork-point говорит Git использовать reflog, который должен помочь ему распознать, что эти пары коммитов "одинаковы", и исключить их из второй перебазировки.

1 голос
/ 11 апреля 2019

У вас не будет другого выбора сделать это один за другим:

Перебазировка branch1 поверх master:

git checkout branch1
git rebase master

Rebase branch1-a поверх branch1:

git checkout branch1-a
git rebase branch1

И так далее, если у вас есть другие ветви.

Всегда перебрасывайте их поверх их ближайшей базы и в этом порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...