Оригинальный плакат гласит:
Лучший ответ, который кто-то мог мне дать, это использовать git revert
X раз, пока я не достигну желаемого коммита.
Допустим, я хочу вернуться к коммиту, которому уже 20 коммитов, мне придется запустить его 20 раз.
Есть ли более простой способ сделать это?
Я не могу использовать сброс, потому что это репо публично.
Нет необходимости использовать git revert
X раз. git revert
может принять диапазон фиксации в качестве аргумента, поэтому вам нужно использовать его только один раз, чтобы отменить диапазон фиксаций.Например, если вы хотите отменить последние 20 коммитов:
git revert --no-edit HEAD~20..
Диапазон фиксации HEAD~20..
короток дляHEAD~20..HEAD
и означает «начать с 20- го родителя фиксации HEAD и вернуть все коммиты после него до HEAD».
Это вернет последние 20 коммитов, при условии, что ни один из них не является коммитом слияния. Если есть коммиты слияния, вы не можете отменить их все одной командой, вам нужно будет отменить их индивидуально с помощью
git revert -m 1 <merge-commit>
Обратите внимание, что я тестировал, используя диапазон с git revert
использованием git версии 1.9.0. Если вы используете более старую версию git, использование диапазона с git revert
может работать, а может и не работать.
В этом случае, git revert
предпочтительнее, чем git checkout
.
Обратите внимание, что в отличие от этого ответа, который говорит использоватьgit checkout
, git revert
фактически удаляются все файлы, которые были добавлены в любой из коммитов, которые вы возвращаете , что делает это правильным способом отменить диапазон ревизий.
Документация