Я предполагаю, что C
является слияние фиксации, и это причина, по которой вы не хотите иметь ее в своем результате.
Что вам нужно, чтобы сделать то, что вы хотите, это начало git rebase
Давайте вместе с еще одной схемы фиксации граф. Для того, чтобы оставить оригинальные ветви нетронутыми мы будем работать на новой ветке называется rebasing
git checkout -b rebasing master
--> A --> B------------------- --> C --> D (branch master) (branch rebasing)
\ /
+----+-> F --> G --> H -+ (branch topic)
Просто перебазировать все между topic
и rebasing
на topic
.
git rebase --onto topic topic rebasing
или сделать то же самое с более короткой командой
git rebase topic
-> A -> B -----------------> C -> D (branch master)
\ /
+---+> F -> G -> H + (branch topic)
\
+---------> B -> D (branch rebasing)
Теперь, когда мы просто смотрим на rebasing
мы имеем прямую форму линии A
к D
.
-> A -> F -> G -> H -> B -> D (branch rebasing)
Таким образом, единственная проблема сейчас может быть, что порядок отличается от того, что вы ожидали. Вы можете легко исправить это, перестроив фиксации git rebase --interactive
, если хотите.
Или вы переустанавливаете все в несколько более сложном виде. Давай начнем сначала.
--> A --> B------------------- --> C --> D (branch master) (branch rebasing)
\ /
+----+-> F --> G --> H -+ (branch topic)
Сначала возьмите все от C
до кончика master
и поставить его на кончике topic
(он же D
.) (Он же H
.):
git rebase --onto topic C master
-> A -> B ----------------> C -> D (branch master)
\ /
+----> F -> G -> H + (branch topic)
\
+---------> D (branch rebasing)
Один последний перебазирования, на конец, и мы закончили.
git rebase B
+----> F -> G -> H + (branch topic)
/ \
-> A -> B ----------------> C -> D (branch master)
\
+------------------------> F -> G -> H -> D (branch rebasing)
Voila!
-> A -> B -> F -> G -> H -> D (branch rebasing)