Git - разница слияния ветвей

У меня три ветки A, B и C. B регулярно сливается с C.

          o---o---o A
         /
--------o---o---o---o---o---o B
         \       \       \   \
          o---o---o---o---o---o C

Теперь я хочу объединить изменения, которые я сделал в C, но без слияний с B, поверх A. Каков самый простой способ сделать это в git?

Ответ 1

Используйте git rebase.

Сначала переустановите свой C поверх B:

git checkout C
git checkout -b rebasedC #Let do a new branch for it also, just in case
git rebase B

он поместит все C-фиксации на B. Теперь мы хотим, чтобы ветвь трансплантата rebasedC от B до A:

git rebase --onto A B rebasedC

Итак, теперь у вас есть C-коммиты на вершине A в ветке rebasedC. Теперь вы можете быстро переслать свой A:

git checkout A
git merge rebasedC
git branch -d rebasedC# I don't think you would need it.

Это все, надеюсь.

Ответ 3

Вы можете попробовать вишневый выбор C не слияния патчей. Будьте готовы к конфликтам слияния.:)