2013-06-06 2 views
0

У меня есть функция ветвь, которая уже объединилась (в M), но вернулась впоследствии (в R):Rebase ветвь, которая уже объединилась

S---o-o-----M-o-R-o 
\  /
    A-----B-C  ^master 

     ^feature 

Я хочу, чтобы перебазироваться в feature ветви на ток master так что я получаю:

S---o-o-----M-o-R-o-A'-B'-C' 
\  /
    A-----B-C    ^new master or new branch 
       ^old master 
     ^feature 

Это аналогично процессу, описанному в добавлении из revert-a-faulty-merge.txt, но вместо того, чтобы основывать новую ветвь на S Я хочу установить его на текущий master.

Согласно this question это решение должно работать:

git rebase --onto stable D fix/123
Это еще вид рискованно, потому что вы должны взять на себя Ша D (а не X, например).

Так что я попытался git rebase --no-ff --onto master S feature, но он просто выдвинул feature этикетки на master этикетки и сказал «Fast-пересылаются функцию для мастера» без создания каких-либо новых фиксаций.

Так как я могу в основном скопировать всю ветку feature на вершине мастера?

+0

Из любопытства, почему вы хотите это сделать? Коммиты A-C уже находятся в истории, поэтому копирование их на вершине мастера дублирует их, возможно, путают всех, кто смотрит на нее. Вместо этого вы можете применить исправление на ветке (чтобы оно было принято на сервере), а затем снова объединить его в мастер. – poke

+0

Они были возвращены некоторое время назад (зафиксируйте «R», точно так же, как Linus описывает в связанном тексте), поэтому мне нужно объединить их снова после некоторых изменений. – AndreKR

ответ

4

git cherry-pick теперь поддерживает диапазон коммитов, например, так:

git cherry-pick S..C 

Это позволит получить совершающее после S через C. Вы можете также указать, чтобы начать с родителя А, как так:

git cherry-pick A^..C 
+0

Вы также можете указать диапазон фиксации для 'git cherry-pick', чтобы вы не пропустили ни одного. – poke

Смежные вопросы