git reset
git reset: скинути HEAD і поточну гілку до іншого коміту.
git reset — команда Git, яка насамперед переміщує HEAD і поточну гілку назад до конкретного коміту, фактично «перемотуючи» історію проєкту до попереднього стану. Ця команда стане в пригоді, коли треба скасувати коміти, зроблені в поточній гілці.
Використати git reset — це наче сказати репозиторію: «забудь, що ці зміни взагалі були, і вважай поточним станом проєкту ранішу версію». Це дуже зручно, коли треба скасувати зміни, спростити заплутану історію чи навіть об'єднати кілька комітів в один перед тим, як ділитися ними з іншими.
Історично git reset використовували для різних завдань, зокрема для скидання робочого дерева та області підготовки. Розробники зі стажем досі користуються git reset для цього. Проте з появою команди git restore у Git 2.23.0 для роботи з робочим деревом та областю підготовки тепер рекомендують саме git restore, а git reset варто залишити переважно для переміщення HEAD і вказівника поточної гілки.
З git restore менше шансів випадково щось зламати: ця команда точковіша й менш руйнівна, ніж git reset. Щоправда, тим, хто звик до старого git reset, може знадобитися час, щоб перелаштуватися. Але якщо знайомство з Git тільки починається, краще одразу розібратися в різниці й там, де це доречно, використовувати git restore замість git reset.
Приклади
Перемістити вказівник поточної гілки на конкретний коміт. Зміни в робочій директорії при цьому збережуться, тож за потреби їх можна поправити й закомітити знову. Зручно, коли треба переробити наявний коміт:
git reset a1b2c3d4Перемістити вказівник поточної гілки на конкретний коміт і скинути до відповідного стану область підготовки, але не робочу директорію. Зручно, щоб зберегти зроблені правки, але почати новий коміт:
git reset --soft a1b2c3d4Перемістити вказівник поточної гілки на конкретний коміт і викинути всі зміни з області підготовки та робочої директорії. Зручно, щоб повністю позбутися незакомічених змін. Обережно: цю дію не можна скасувати!
git reset --hard a1b2c3d4Замість хеша коміту можна використовувати відносні посилання: перемістити вказівник поточної гілки на один коміт назад:
git reset HEAD~1Із git reset варто бути обережніше, особливо з опцією --hard: вона може безповоротно знищити зміни. Завжди перевіряй, що скидаєш гілку саме до того коміту, який потрібен. А якщо незакомічені зміни ще можуть знадобитися, перед скиданням збережи їх через git stash.
Зверни увагу: git reset не видаляє коміти повністю — насправді команда просто переміщує вказівник гілки. «Видалені» коміти залишаються в історії репозиторію (до них можна дістатися за хешем коміту), але вони більше не досяжні з поточної гілки. Тобто за потреби їх можна відновити, однак в історії гілки вони вже не з'являться.
.gitignoregit checkoutgit configgit taggit worktree