Resetování repozitáře
Někdy se stane, že uděláte „špatný" commit - například jste do něj dali něco omylem,
nebo jste commit udělali moc brzy.
V takové situaci může pomoci příkaz git reset.
Jak odstranit všechny lokální změny?
Použijte příkaz git checkout -- .
Velmi zjednodušeně:
git resetposune ukazatel HEAD na jiný commit v historii.- Podle režimu (
--soft,--mixed,--hard) se navíc změní i to, co je ve staging area a ve vaší pracovní složce.
Riziko ztráty dat
git reset je silný nástroj a zejména --hard může nenávratně smazat neuložené změny.
Hard
git reset --hard je nejtvrdší varianta resetu.
- Posune HEAD na vybraný commit.
- Přepíše staging area (index) podle tohoto commitu.
- Přepíše i pracovní složku podle tohoto commitu.
- Všechny neuložené změny (které nejsou v commitu) se ztratí.
Co to vlastně udělá?
Vratí celý projekt do stavu, ve kterém byl v daném commitu, a všechno ostatní odstraní.
Kdy má smysl hard reset použít
- Udělali jste několik commitů jen na zkoušku, nikdy jste je
neposlali na server (
git push) a chcete se vrátit do původního stavu. - Máte v pracovním adresáři nepořádek, zkoušeli jste různé věci a rozhodnete se: > „Nechci nic z toho, vrať mě zpět."
Vždy si ale zkontrolujte, že tyto commity nejsou sdílené s ostatními.
Příklad: vrácení posledního commitu
git log --oneline
a3b4c5d (HEAD -> main) Přidání formuláře pro registraci
9f8e7d6 Úprava CSS stylů
1a2b3c4 První verze stránky
git reset --hard HEAD~1
git log --oneline
9f8e7d6 (HEAD -> main) Úprava CSS stylů
1a2b3c4 První verze stránky
Soft
git reset --soft je mnohem šetrnější.
- Posune HEAD na vybraný commit.
- Staging area i pracovní složka zůstanou tak, jak byly.
- Změny z „odstraněných" commitů se vrátí jako připravené k commitu (staged).
Co to vlastně udělá?
Vymaže poslední commit(y), ale nechá všechny změny, aby je šlo znovu commitnout.
Kdy má smysl soft reset použít
- Potřebujete přepsat commit message.
- Chcete sloučit více commitů do jednoho.
- Uvědomíte si, že commit obsahuje víc, než by měl.
Příklad: přepsání posledního commitu
git reset --soft HEAD~1
git commit -m "Oprava chování tlačítka"
[main b7c8d9e] Oprava chování tlačítka odeslat
2 files changed, 10 insertions(+), 3 deletions(-)
Příklad: sloučení dvou commitů do jednoho
git reset --soft HEAD~2
git commit -m "Přidání stránky s kontakty"
[main e4f5a6b] Přidání stránky s kontakty
2 files changed, 45 insertions(+)
create mode 100644 index.html