Рисунок, который вы нарисовали, выглядит как результат git merge
, но ваше описание того, что вы хотите, звучит как git rebase
.
Заимствование из главы "Перебазировка" книги сообщества git, если вы находитесь в ветке mywork
и говорите
$ git merge origin
вы получите
Думайте о слиянии как о соединении двух разных снимков: в этом случае C4 и C6 собрались вместе, чтобы создать C7.
Rebase создает дерево, которое выглядит точно так же, как C7, но его история выглядит совершенно иначе. Скажем, вместо слияния вы дали команду
$ git rebase origin
вы получите
Когда вы захотите: «Мне бы очень хотелось, чтобы я создал ветвь mywork
на С4 вместо С2», - git rebase
- это джинни, который даст это.
Вы могли бы также подумать о перебазировании, как обрезке ветки из вашей истории и пересадке ее в другую точку. Не пропустите тонкое изменение от C5 и C6 до C5 'и C6'. Хотя деревья будут выглядеть одинаково, у них будут разные родители, что приведет к изменению их git-идентификаторов.