Отмените диапазон коммитов в git

Как я могу вернуть диапазон коммитов в git? От просмотра документации gitrevisions я не вижу, как указать диапазон, в котором я нуждаюсь. Например:

A -> B -> C -> D -> E -> HEAD

Я хочу сделать эквивалент:

git revert B-D

где результат будет:

A -> B -> C -> D -> E -> F -> HEAD

где F содержит обратную сторону B-D включительно.

+78
14 февр. '11 в 11:25
источник поделиться
4 ответа

Какую версию Git вы используете?

Возврат нескольких коммитов только в Git1.7.2 +: см. "Откат к старой фиксации с повторным использованием несколько раз." для получения более подробной информации.
Текущая git revert справочная страница предназначена только для текущей версии Git (1.7.4 +).


Как сообщает OP Alex Spurling, в комментариях:

Обновление до 1.7.4 отлично работает.
Чтобы ответить на мой собственный вопрос, это синтаксис, который я искал:

git revert B^..D 

Обратите внимание, что каждый возвращенный фиксат выполняется отдельно.

Henrik N разъясняет комментарии:

git revert OLDER_COMMIT^..NEWER_COMMIT

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

git revert -n OLDER_COMMIT^..NEWER_COMMIT
git commit -m "revert OLDER_COMMIT to NEWER_COMMIT"
+101
14 февр. '11 в 13:31
источник

Связанные вопросы


Похожие вопросы

Выполнение git revert OLDER_COMMIT^..NEWER_COMMIT не сработало для меня, я использовал git revert -n OLDER_COMMIT^..NEWER_COMMIT и все хорошо, я использую git версию 1.7.9.6.

+4
25 окт. '12 в 18:15
источник

Если вы хотите отменить диапазон выполнения от B до D (по крайней мере, в git версии 2) в одном коммите, вы можете сделать

 git revert -n B^..D

Это отменит сделанные изменения, совершив фиксацию B (исключая) B в фиксацию D (включено), но не создает фиксацию с отмененными изменениями. Возврат только изменяет рабочее дерево и индекс.

Не забывайте фиксировать изменения после

 git commit -m "revert commit range B to D"

Вы также можете вернуть несколько несвязанных коммитов в одном коммите, используя тот же метод. например, для возврата B и D, но не C

 git revert -n B D
 git commit -m "Revert commits B and D"

Ссылка: https://www.kernel.org/pub/software/scm/git/docs/git-revert.html

Спасибо Хонза Харинг для коррекции

+3
24 янв. '17 в 7:22
источник

Используйте git rebase -i, чтобы вырезать соответствующие коммиты в один. Затем у вас есть только одна фиксация для возврата.

-1
14 февр. '11 в 13:48
источник

Посмотрите другие вопросы по меткам или Задайте вопрос