Перебазировать уже слитую ветку поверх мастера - PullRequest
0 голосов
/ 09 января 2019

У меня возникла следующая проблема. У меня есть две ветви Git (первая: коммиты E, C, B и вторая: коммит D), как видно на картинке, которая разветвляется и объединяется с главной веткой (F и A)

Git Tree

Я хотел бы поставить D на вершине A и удалить его из того места, где он в данный момент находится. Возможно ли это как-то?

1 Ответ

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

Единственный способ, которым я вижу, - сбросить мастер на F, сбросить yellow ветвь на E, вишневый пик C и B на yellow ветвь, объединить yellow в master и наконец вишня D.

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

#on master branch, with no unstaged or uncommited changes:
git branch backup
git reset --hard F
git checkout yellow
git reset --hard E
git cherry-pick C
git cherry-pick B

#merge yellow branch into master, however you usually do that

git checkout master
git cherry-pick D

Предупреждение: не тестировалось.

Как я уже сказал в своем комментарии, это сильно испортит ситуацию, если кто-то уже работает над старым мастером.

EDIT: если C - это коммит слияния от D до yellow, он, очевидно, не должен выбираться вишней и может игнорироваться.

...