git reset Удаление коммитов, откат к указанном коммиту -- примеры

git reset -- удаляет коммит, с помощью перестановки HEAD на коммит, который вы укажете -- предыдущие изменения "отменяются" в зависимости от режима.

Стоит отметить, что git revert часто является более подходящим, особенно для случаев, когда уже был выполнен push в какой-нибудь из внешних репозиториев.

В случае revert вы сохраните откат изменений как обратные изменения тем, что вам не нужны, reset же следует использовать, если вы хотите удалить коммиты и не отражать факт этого удаления в истории (напр. на случай, если в будущем окажется, что эти измения удалять все же не следовало, и нужно вернуть все назад))

git reset --soft Более безопасный вариант

Например (для всех изменений):

git reset --soft 82a09a6

или для конктретного файла:

git reset --soft 82a09a6 путькфайлу

(где путькфайлу -- путь к файлу относительно диретории выполнения команды)

где 82a09a6 -- хэш коммита (в данном случае он получен в краткой форме, см. подробнее о том, как выводить историю изменений), состояние которого будет принято как актуальное.

В этом варианте ( --soft ):

  • состояние репозитория сбрасывается именно к коммиту указаному выше (в данном случае это 82a09a6), так что этот коммит оказывается последним в истории git log
  • а все изменения, что отменены все ещё находятся в файлах, но в репозитории они принимают вид будто уже был сделано add, но не был сделан коммит ("Changes to be committed")

После выполнения команды git reset --soft можно выполнить git status, убедиться что изменения в файлах, которые теперь выглядят как добавленные (add), но ещё не зафиксированны коммитом действительно более ненужны, и тогда отменить эти незафисированные измения командой (по аналогии с отметой git add):

git reset .

После чего git status должен показать, что незафиксированных изменний нет.

git reset Удаление всех неопубликованных коммитов

Для начала:

Удаление коммитов с сохранением изменений в файлах:

git reset --soft origin/имяветки

Удаление коммитов без сохранения изменений в файлах:

git reset --hard origin/имяветки

Что ещё почитать

vedro-compota's picture

Проблема:

 git reset --soft dab1f45397a6138 web/autoload.php
fatal: Cannot do soft reset with paths.

Пишут, что такое поведение не нужно

_____________
матфак вгу и остальная классика =)