Git Reset

2 λεπτά

Πίνακας περιεχομένων

  1. Τι είναι το reset;
  2. Οι 3 λειτουργίες reset
  3. Reset soft
  4. Reset mixed
  5. Reset hard
  6. Κίνδυνος και προφυλάξεις
  7. Πρακτικές εντολές

1. Τι είναι το reset;

Git reset = Επιστροφή στον χρόνο ακυρώνοντας commits.

Έννοια:

  • Μετακίνηση του κλάδου προς ένα προηγούμενο commit
  • 3 λειτουργίες ανάλογα με το τι κρατάμε ή διαγράφουμε
  • ΚΑΤΑΣΤΡΟΦΙΚΟ αν χρησιμοποιηθεί λάθος

Αναλογία: Είναι σαν να σβήνετε σελίδες από ένα τετράδιο.

Επιστροφή στον πίνακα περιεχομένων

2. Οι 3 λειτουργίες reset

ΛειτουργίαCommitsIndex/StagingWorking Directory
--softΑκυρώνειΔιατηρείΔιατηρεί
--mixedΑκυρώνειΣβήνειΔιατηρεί
--hardΑκυρώνειΣβήνειΣβήνει

Απλό σημείωμα:

  • Soft = μόνο τα commits
  • Mixed = commits + staging
  • Hard = ΤΑ ΠΑΝΤΑ (επικίνδυνο!)

Επιστροφή στον πίνακα περιεχομένων

3. Reset soft

Χρήση: Ξανακάντε το τελευταίο commit με περισσότερες αλλαγές.

bash
mkdir demo-reset && cd demo-reset
git init

echo "print('v1')" > app.py && git add . && git commit -m "Version 1"
echo "print('v2')" > app.py && git add . && git commit -m "Version 2"

# Reset soft: ακυρώνει το commit, κρατά τα πάντα στο staging
git reset --soft HEAD~1

git status                    # Αλλαγές σταδιοποιημένες και έτοιμες
git log --oneline            # Ένα commit λιγότερο
cat app.py                   # Το περιεχόμενο v2 είναι ακόμα εκεί

# Νέο commit με βελτιωμένο μήνυμα
git commit -m "Version 2 - Avec nouvelles features"

Επιστροφή στον πίνακα περιεχομένων

4. Reset mixed

Χρήση: Ακύρωση commits ΚΑΙ αποσταδιοποίηση (προεπιλεγμένη λειτουργία).

bash
echo "print('v3')" > app.py && git add . && git commit -m "Version 3"

# Reset mixed (ή απλά git reset)
git reset HEAD~1

git status                   # Αλλαγές ΜΗ σταδιοποιημένες
git log --oneline           # Commits ακυρωμένα
cat app.py                  # Το περιεχόμενο v3 είναι ακόμα εκεί, αλλά όχι σταδιοποιημένο

# Πρέπει να κάνετε add ξανά πριν το commit
git add . && git commit -m "Version 3 - Refait proprement"

Επιστροφή στον πίνακα περιεχομένων

5. Reset hard

ΚΙΝΔΥΝΟΣ: Διαγράφει ΤΑ ΠΑΝΤΑ, ακόμα και τις μη καταχωρημένες τροποποιήσεις σας!

bash
echo "print('v4')" > app.py && git add . && git commit -m "Version 4"

# Τροποποιήσεις σε εξέλιξη
echo "print('work in progress')" >> app.py

# Reset hard: ΟΛΑ ΕΞΑΦΑΝΙΖΟΝΤΑΙ
git reset --hard HEAD~1

git status                  # Working directory clean
cat app.py                 # Επιστροφή στο v2, η εργασία σε εξέλιξη ΧΑΘΗΚΕ!

Χρήση: Όταν θέλετε ΠΡΑΓΜΑΤΙΚΑ να πετάξετε τα πάντα και να επιστρέψετε πίσω.

Επιστροφή στον πίνακα περιεχομένων

6. Κίνδυνος και προφυλάξεις

Το reset είναι ΚΑΤΑΣΤΡΟΦΙΚΟ με κοινόχρηστα commits!

ΠΟΤΕ μην κάνετε αυτό:

bash
git push origin main           # Commits κοινόχρηστα με την ομάδα  
git reset --hard HEAD~3        # Διαγράφει 3 κοινόχρηστα commits
git push --force              # Επιβάλλει τη διαγραφή σε όλους
# = ΧΑΟΣ στην ομάδα!

Κανόνας ασφαλείας:

  • Reset ΟΚ σε τοπικά commits (μη σταλμένα)
  • Reset ΑΠΑΓΟΡΕΥΕΤΑΙ σε ήδη κοινόχρηστα commits
  • Εναλλακτική: git revert (ασφαλέστερο)

Επιστροφή στον πίνακα περιεχομένων

7. Πρακτικές εντολές

ΕντολήΕνέργεια
git reset HEAD~1Ακυρώνει 1 commit (mixed)
git reset --soft HEAD~2Ακυρώνει 2 commits, κρατά το staging
git reset --hard HEAD~1Ακυρώνει 1 commit, διαγράφει ΤΑ ΠΑΝΤΑ
git reset <hash>Επιστροφή σε συγκεκριμένο commit
git reset --hard origin/mainReset στην απομακρυσμένη έκδοση

Reset = ισχυρό αλλά επικίνδυνο. Χρησιμοποιήστε το με προσοχή!

Επιστροφή στον πίνακα περιεχομένων