Удаление коммитов из одной ветки в Git'е

У меня есть две ветки, master и feature1. Я работал над feature1, когда понял, что мне нужно поработать над чем-то другим, не имеющим отношения к делу. К сожалению, я забыл ветку от мастера, а вместо этого создал ветку feature2 от feature1. Теперь я хочу слить feature2 в master, но не могу, потому что в этой ветке есть части feature1.

Как удалить коммиты feature1 из ветви feature2? Включает ли это перебазирование?

Мне кажется, что если бы я мог изменить исходный ориентир feature2 на то, где находится ведущая функция, это могло бы помочь, но я понятия не имею, как это сделать.

EDIT:

Спасибо за ответы! Я попытался сделать ребазинг в соответствии с решением @Mark, но понял, что история сложнее, чем я думал изначально. Функция 2 была слита с другими ветвями функции, а мастер в какой-то момент был слит с функцией2. Также есть дополнительные коммиты на master, которые не связаны с feature2 Все осталось локальным.

На самом деле, моя история больше похожа на эту:

A - B - C - D - - - - - - - - - - - - - L - M  master  
            |                          
            |               - I - J - K  feature2                  
            \              /           \
             - E - F - G - H - - - - - -N - O - P  feature1

И вот что я хочу:

A - B - C - D - - - - - - - - - -  L - M  master
            |\                          
            |  - - - - - I - J - K  feature2                  
            \                     \
              - E - F - G - H - - - N - O - P  feature1

Я тоже пытался:

git rebase --onto 1524b824cfce5856a49e feature1 feature2
// 1524b824cfce5856a49e == D

Но это просто устанавливает, что имя ветви feature 2 указывает на 1524, и оставляет коммиты I, J, K с их первоначальными родителями.

27
задан Andrew 31 August 2011 в 17:19
поделиться