git reset (основы)

Тема дорожной карты · Изучи Git

git reset — это команда, которая позволяет сдвигать указатель текущей ветки и, при необходимости, индекс и рабочее дерево. Эта команда является важной для управления версионностью кода и обеспечения чистоты рабочего дерева. Она позволяет откатить изменения, которые еще не были добавлены в индекс или коммитированы, и обеспечивает возможность возврата к предыдущему состоянию.

Как это работает

Команда git reset имеет три основных режима: --soft, --mixed (по умолчанию) и --hard. Режим --soft сдвигает указатель текущей ветки, но не затрагивает индекс или рабочее дерево, что позволяет оставить правки в индексе. Режим --mixed сдвигает указатель текущей ветки и сбрасывает индекс, делая правки неподготовленными. Режим --hard сдвигает указатель текущей ветки и сбрасывает как индекс, так и рабочее дерево, что приводит к потере правок.

Дополнительно, можно использовать команды git restore <file> для отмены изменений в рабочем дереве, git restore --staged <file> для отмены индексированных изменений, git commit --amend для переписывания последнего коммита (только если он еще не был запушен), git reset --soft HEAD~1 для отмены коммита, оставляя правки в индексе, git reset --mixed HEAD~1 для отмены коммита и отмены индексированных изменений (по умолчанию), и git reset --hard HEAD~1 для отмены коммита и удаления правок в рабочем дереве.

Команда git revert <sha> создает новый коммит, который отменяет конкретное изменение, сохраняя историю. Это безопасно использовать на общих ветках, так как новый коммит не переписывает историю.

Когда применять

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

Всегда следует использовать git stash или git commit --amend перед git reset --hard, чтобы сохранить работу в git reflog, которая может быть восстановлена в течение 30 дней.

Типичные ошибки

Типичные ошибки при использовании git reset могут включать применение git reset --hard на ветке с несохраненной работой, что приводит к мгновенному удалению правок. Также ошибкой является попытка переписать уже запушенный коммит с помощью git commit --amend и force-push, что переписывает общую историю, что может привести к проблемам в команде. Использование git reset там, где правильно было бы использовать git revert, также может привести к созданию новых "undo"-коммитов, которые могут быть опасны на общих ветках.

Связанные понятия

Полезные ресурсы