mkdir exercice-reset && cd exercice-reset
git init
# Δημιουργία πολλών commits για δοκιμή
echo "print('v1')" > app.py && git add . && git commit -m "Version 1"
echo "print('v2')" > app.py && git add . && git commit -m "Version 2"
echo "print('v3')" > app.py && git add . && git commit -m "Version 3"
echo "print('v4')" > app.py && git add . && git commit -m "Version 4"
git log --oneline # Σημειώστε τα hashΣτόχος: Επιστροφή 2 commits πίσω, διατήρηση των αλλαγών σταδιοποιημένων.
git reset --soft HEAD~2
# Επαληθεύσεις
git status # Αλλαγές στην περιοχή staging;
cat app.py # Ποιο περιεχόμενο;
git log --oneline # Πόσα commits;Αναμενόμενο αποτέλεσμα:
v4Επαναφορά στο μηδέν και έπειτα δοκιμή mixed:
git commit -m "Re-commit v4" # Επαναφορά του v4
git reset --mixed HEAD~1 # Επιστροφή 1 commit (προεπιλεγμένη λειτουργία)
# Επαληθεύσεις
git status # Μη σταδιοποιημένες αλλαγές;
cat app.py # Ποιο περιεχόμενο;
git log --oneline # Πόσα commits;Αναμενόμενο αποτέλεσμα:
v4ΠΡΟΣΟΧΗ: Reset hard = καταστροφικό!
git add . # Σταδιοποίηση των αλλαγών
git commit -m "Re-commit v4" # Επαναφορά του v4
git reset --hard HEAD~2 # Διαγραφή ΟΛΩΝ, επιστροφή 2 commits
# Επαληθεύσεις
git status # Καθαρό working directory;
cat app.py # Ποιο περιεχόμενο;
git log --oneline # Πόσα commits;Αναμενόμενο αποτέλεσμα:
v2Ανακεφαλαίωση των 3 λειτουργιών:
| Λειτουργία | Commits | Staging | Working Directory |
|---|---|---|---|
--soft | Πίσω | Κρατά | Κρατά |
--mixed | Πίσω | Διαγράφει | Κρατά |
--hard | Πίσω | Διαγράφει | Διαγράφει |
Καταλάβατε τις 3 λειτουργίες; Τέλεια! Το reset δεν έχει πια μυστικά.