Подтвердить что ты не робот

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

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

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

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

git revert B-D

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

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

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

4b9b3361

Ответ 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, чтобы вырезать соответствующие коммиты в один. Затем у вас есть только одна фиксация для возврата.