Как исправлять ошибки в Git
Вопрос
Как ты отменишь изменения в Git в разных ситуациях: правки ещё не закоммичены, коммит только локальный, коммит уже в общей ветке?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
незакоммиченные правки: git restore (или restore --staged для индекса), stash если нужно сохранить
локальный коммит: reset --soft / --mixed / --hard в зависимости от того, что сохранить
коммит в общей ветке: git revert, без переписывания истории
commit --amend для последнего локального коммита
reflog спасает после reset --hard и неудачного rebase
секрет в истории не удаляется новым коммитом: нужна ротация ключа
Что могут спросить следом
- Чем reset --mixed отличается от --soft?
- Как отменить merge-коммит через revert?
- Что делать, если запушил .env с ключами?
Разбор
Зависит от того, где изменения. Если они не закоммичены, git restore файл вернёт файл к индексу, а git restore --staged уберёт его из индекса; если правки жалко, сначала git stash.
Если коммит только у меня локально, могу переписать историю: git commit --amend для последнего коммита или git reset. --soft оставит изменения в индексе, --mixed в файлах, --hard выбросит их совсем.
Если коммит уже в общей ветке, переписывать нельзя, поэтому git revert <hash>: новый коммит, отменяющий старый. Для merge-коммита нужен -m 1, чтобы указать основную линию.
Если ошибся с reset или rebase, выручит git reflog: там видно прежнее положение HEAD. И отдельно: если в историю попал секрет, удаление файла новым коммитом не помогает, ключ нужно перевыпустить, а историю чистить специальными инструментами.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.