Откат
Вы должны быть в состоянии сделать GIT Revert:
git checkout master
git revert B -m <mainline>
Где mainline
- целое число, которое определяет ветвь для использования в качестве основного. Вы можете легко вычесть какой из них использовать, набрав
git log B
Вы должны увидеть что-то вроде:
commit B
Merge: A H
И тогда ваш магистральный является 1
, если вы хотите, чтобы вернуться в состояние A
или 2
, если вы хотите для возврата в состояние H
.
В этом случае можно было бы написать:
git revert B -m 1
Это создаст новый фиксации с B коммит удалены. Ваша история будет выглядеть как:
0--A--B--C--D--E--F
Если F
совершить на самом деле является отмена из B
.
Как говорится в git-revert manpage, полезно проверить Revert a faulty merge How-To.
перебазирования
Другой вариант сделать:
git checkout master
git rebase -i A
однако это изменит вы мерзавец историю и не может быть то, что вы хотите, особенно если другие люди работают на том же хранилище.
новый редактор всплывет что-то вроде:
pick A
pick G
pick H
pick C
pick D
pick E
И вы должны изменить его на:
pick A
drop G
drop H
pick C
pick D
pick E
Сохраните файл и выйдите из редактора, чтобы продолжить процесс перебазирования.
Ваша история должна теперь выглядеть так: 0--A--C--D--E
.
Вишневый собирание
Или вы можете создать новую ветку и вишневый выбрать коммиты вы хотите:
git checkout A
git checkout -b new-master
git cherry-pick C..E
Checkout А и вишневого выбор C в E, возможно – Martin