Как мне перебазировать, пропуская конкретную фиксацию?

Есть ли способ перебазировать ветку на другую, пропуская конкретную (конфликтующую) фиксацию в другой ветке?

Например, я хочу перебазировать mybranch на master, но master содержит фиксацию, которая будет конфликтовать с фиксациями в master, поэтому я предпочитаю полностью отменить эту фиксацию.

-o-o-o-o-o-x-o-o-o-o master
     |
     o-o-o-o mybranch

x помечает конфликтующий коммит.


person Phillip    schedule 26.09.2012    source источник


Ответы (1)


Используйте интерактивную перезагрузку:

git rebase -i master

Откроется редактор, и у вас будет такой список коммитов:

pick b8f7c25 Fix 1
pick 273b0bb Fix 2
pick 6aaea1b Fix 3

Просто удалите коммит, который хотите пропустить. Он будет опущен при перемещении вашей ветки на master.

PS Если вы не видите редактор, обратитесь к этому вопросу для решения: Как настроить редактор для работы с Git в Windows?

person Sergey K.    schedule 26.09.2012
comment
Редактор показывает только коммиты на mybranch. Есть ли способ показать все коммиты; то есть от кончика mybranch, до мастера и до кончика мастера? - person Phillip; 26.09.2012
comment
Вы хотите удалить коммит в своей ветке или в мастере? Второй вариант довольно небезопасен и создаст проблемы всем другим разработчикам, у которых master является их восходящим потоком. - person Sergey K.; 26.09.2012
comment
Я хочу пропустить фиксацию на мастере (я добавил диаграмму как часть своего вопроса). На данный момент меня не беспокоит master в восходящем направлении. - person Phillip; 26.09.2012
comment
При оформлении заказа сделайте git rebase -i <commit-you-want-to-omit>^ и удалите его в редакторе. - person Sergey K.; 26.09.2012