Отмените диапазон коммитов в git
Как я могу вернуть диапазон коммитов в git? От просмотра документации gitrevisions я не вижу, как указать диапазон, в котором я нуждаюсь. Например:
A -> B -> C -> D -> E -> HEAD
Я хочу сделать эквивалент:
git revert B-D
где результат будет:
A -> B -> C -> D -> E -> F -> HEAD
где F содержит обратную сторону B-D включительно.
Ответы
Ответ 1
Какую версию 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"
Ответ 2
Выполнение git revert OLDER_COMMIT^..NEWER_COMMIT
не сработало для меня, я использовал git revert -n OLDER_COMMIT^..NEWER_COMMIT
и все хорошо, я использую git версию 1.7.9.6
.
Ответ 3
Если вы хотите отменить диапазон выполнения от 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
Спасибо Хонза Харинг для коррекции
Ответ 4
Используйте git rebase -i
, чтобы вырезать соответствующие коммиты в один. Затем у вас есть только одна фиксация для возврата.