Historia i cofanie zmian w Git

1. Wprowadzenie

Git pozwala na przeglądanie historii projektu i cofanie zmian. W tej lekcji nauczysz się: * Przeglądać historię commitów * Cofać zmiany * Poprawiać commity * Resetować repozytorium


2. Historia commitów

2.1. git log

2.2. git log dla konkretnego pliku

2.3. git log z filtrami


3. Wyświetlanie zmian

3.1. git show

Pokazuje szczegóły commita:

3.2. git show dla pliku


4. Cofanie zmian - różne metody

4.1. git restore (Git 2.23+)

Cofnięcie zmian w pliku (niezacommitowane):

Usunięcie z staging area:

4.2. git checkout (starsza metoda)


5. git reset

5.1. Typy reset

Opcja Working Directory Staging Area Historia
--soft Bez zmian Bez zmian Resetuje
--mixed (domyślny) Bez zmian Resetuje Resetuje
--hard Resetuje Resetuje Resetuje

5.2. git reset --soft

Cofa commity, ale zostawia zmiany w staging:

Użycie: Poprawianie ostatniego commita.

5.3. git reset --mixed (domyślny)

Cofa commity i usuwa ze staging:

5.4. git reset --hard

Cofa commity i usuwa WSZYSTKIE zmiany:

⚠️ UWAGA: Nieodwracalne! Tracisz zmiany!


6. git revert

Tworzy nowy commit cofający zmiany:

Różnica z reset: * reset – zmienia historię (niebezpieczne dla pracy zespołowej) * revert – dodaje nowy commit (bezpieczne)


7. Poprawianie commitów

7.1. git commit --amend

Poprawia ostatni commit:

7.2. Zmiana autora


8. Praktyczne przykłady

8.1. Cofnięcie niezacommitowanych zmian

8.2. Usunięcie pliku ze staging

8.3. Cofnięcie ostatniego commita

8.4. Cofnięcie commita z środka historii


9. git reflog

Pokazuje historię wszystkich operacji:

Output:

abc1234 HEAD@{0}: commit: Dodanie funkcji
xyz7890 HEAD@{1}: checkout: moving from main to feature
def5678 HEAD@{2}: commit: Naprawa błędu

9.1. Odzyskiwanie usuniętych commitów


10. git clean

Usuwa nieśledzone pliki:


11. Scenariusze

Scenariusz 1: Przypadkowy commit

Scenariusz 2: Push z błędem

⚠️ NIGDY nie używaj --force na współdzielonych branchach!

Scenariusz 3: Usunięty plik


12. Bezpieczne cofanie

✅ Bezpieczne:

  • git revert – na współdzielonych branchach
  • git reset – tylko na lokalnych branchach
  • git restore – dla niezacommitowanych zmian

❌ Niebezpieczne:

  • git reset --hard + git push --force na main
  • Zmiana historii po push

13. Cheatsheet

Komenda Opis
git log Historia commitów
git show <commit> Szczegóły commita
git restore <plik> Cofnij zmiany
git restore --staged <plik> Usuń ze staging
git reset --soft HEAD~1 Cofnij commit, zachowaj zmiany
git reset --hard HEAD~1 Cofnij commit i zmiany
git revert <commit> Cofnij commit (nowy commit)
git commit --amend Popraw ostatni commit
git reflog Historia operacji
git clean -fd Usuń nieśledzone pliki

14. Podsumowanie

Git pozwala na cofanie błędów:

  • restore – dla niezacommitowanych zmian
  • reset – dla lokalnych commitów
  • revert – dla współdzielonych commitów
  • reflog – odzyskiwanie usuniętych commitów

Co dalej:

  • Lekcja 8 – .gitignore
  • Lekcja 9 – Stash

Umiesz już cofać zmiany w Git!