git reset Удаление коммитов, откат к указанном коммиту -- примеры
Primary tabs
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 должен показать, что добавленных, но незафиксированных изменний нет (если нужно отменить и это см. отмену add)
git reset Удаление всех неопубликованных коммитов
Для начала:
- Переключитесь на ветку, и которой вы хотите удалить все коммиты, которые не были опубликованы (т.е. тех для которых не делался push).
- Посмотрите какие имеено коммиты не опубликованы
Удаление коммитов с сохранением изменений в файлах:
git reset --soft origin/имяветки
Удаление коммитов без сохранения изменений в файлах:
git reset --hard origin/имяветки
Что ещё почитать
- Подробнее о git reset: https://habrahabr.ru/post/203282/
- Удаление неопубликованных коммитов: https://stackoverflow.com/a/54323316
- Log in to post comments
- 8600 reads
vedro-compota
Wed, 01/27/2021 - 18:13
Permalink
git reset soft Для одного файла one file
Проблема:
Пишут, что такое поведение не нужно
_____________
матфак вгу и остальная классика =)