Η διαγραφή μιας δέσμευσης στο Git είναι κάτι που μπορεί να κάνετε πιο συχνά από ό,τι θα περιμένατε. Με μια τόσο κοινή εργασία, πιθανότατα θα σας φανεί χρήσιμο να έχετε έναν γρήγορο οδηγό.

Αυτό το άρθρο απαντά πώς να διαγράψετε μια δέσμευση Git και άλλες πιθανές λύσεις που μπορείτε να δοκιμάσετε. Επομένως, εάν κάνετε λάθος στην τελευταία σας δέσμευση ή θέλετε να καθαρίσετε το ιστορικό του repo σας, διαβάστε παρακάτω για να μάθετε.
Διαγραφή δέσμευσης στο Git
Μπορείτε να διαγράψετε μια δέσμευση στο Git με μερικούς τρόπους. Εάν δεν θέλετε ή δεν μπορείτε να αλλάξετε το μήνυμα δέσμευσης Git , τότε η πιο συνηθισμένη λύση είναι να χρησιμοποιήσετε τις εντολές "git reset" και "git revert".
Για να χρησιμοποιήσετε το "git reset", κάντε το εξής:
- Βρείτε το commit που θέλετε να διαγράψετε με το git log .

- Χρησιμοποιήστε την επαναφορά git - soft [commit hash] για να αναιρέσετε μια εντολή δέσμευσης χωρίς να "nuking" τίποτα.

- Εναλλακτικά, χρησιμοποιήστε το git reset –hard [commit hash] για επαναφορά στο commit πριν από αυτό που θέλετε να διαγράψετε.

- Αντικαταστήστε το "[commit hash]" με τον κατακερματισμό της δέσμευσης που στοχεύετε.
Εναλλακτικά, μπορείτε επίσης να χρησιμοποιήσετε το "git rebase -i HEAD~[Number]" για να επαναφέρετε τον τελευταίο αριθμό δεσμεύσεων. Αντικαταστήστε το [number] με τον αριθμό των δεσμεύσεων. Το Git θα σας δείξει ένα αρχείο που μπορείτε να επεξεργαστείτε και να αφαιρέσετε το commit που θέλετε να φύγετε. Κάντε αυτό μόνο εάν δεν έχετε ήδη προωθήσει μια δέσμευση.
Αυτή είναι μια απλή μέθοδος στην επιφάνεια, αλλά να είστε προσεκτικοί. Καταργεί οριστικά όλες τις αλλαγές στις δεσμεύσεις μετά από αυτήν στην οποία το επαναφέρατε, οπότε βεβαιωθείτε ότι αυτό είναι ακριβώς αυτό που θέλετε.
Εναλλακτικά, μπορείτε να χρησιμοποιήσετε το "git revert" ως εξής:
- Εάν θέλετε να διατηρήσετε τις αλλαγές στον κατάλογο εργασίας σας, χρησιμοποιήστε το git revert [commit hash] . Αυτή η εντολή δημιουργεί ένα νέο commit που αναιρεί τις αλλαγές από το commit που καθορίζετε.

- Μετά την επαναφορά, σπρώξτε τις αλλαγές στο απομακρυσμένο αποθετήριο με το git push .

Ακολουθεί μια άλλη εναλλακτική, σε περίπτωση που θέλετε να διαγράψετε πολλές, συγκεκριμένες δεσμεύσεις:
- Χρησιμοποιήστε το git checkout [last commit hash] για να ελέγξετε την τελευταία δέσμευση που πρέπει να παραμείνει.

- Δημιουργήστε ένα νέο υποκατάστημα με επισκευή git checkout -b .

- Εκτελέστε το git cherry-pick [specific commit hash] στην πρώτη δέσμευση που θέλετε να διατηρήσετε.

- Επαναλάβετε για τις άλλες δεσμεύσεις που θέλετε να διατηρήσετε.
- Εκτελέστε το git checkout master σε checkout master.

- Επαναφορά του master στην τελευταία χρησιμοποιήσιμη δέσμευση με git reset –hard [last commit hash] .

- Συγχώνευση του νέου κλάδου για master με την επιδιόρθωση συγχώνευσης git .

- Στη συνέχεια, εκτελέστε το git push -f origin master για να πιέσετε στο τηλεχειριστήριο.

Πότε πρέπει να διαγράψετε δεσμεύσεις
Υπάρχουν μερικές περιπτώσεις κατά τις οποίες η αφαίρεση μιας δέσμευσης είναι το καλύτερο που μπορείτε να κάνετε. Εδώ είναι μερικά από αυτά.
Κακός Κώδικας
Ένας από τους πιο συνηθισμένους λόγους για τους οποίους θέλετε να απαλλαγείτε από μια δέσμευση είναι επειδή ο κώδικας σε αυτό απλώς δεν την κόβει. Ίσως έχετε κάνει ένα λάθος και θέλετε να ξεκινήσετε από την αρχή, ή ίσως έχετε συνειδητοποιήσει ότι το αποτέλεσμα δεν ταιριάζει με αυτό που προσπαθείτε να επιτύχετε. Για παράδειγμα, μπορεί να έχετε προσθέσει μια συνάρτηση που έρχεται σε διένεξη με άλλο τμήμα του κώδικά σας. Η διαγραφή αυτής της δέσμευσης σάς επιτρέπει να επιστρέψετε, να διορθώσετε το πρόβλημα και, στη συνέχεια, να δεσμεύσετε ξανά τη διορθωμένη έκδοση.
Εάν μόλις δεσμεύσατε ένα κομμάτι κώδικα και στη συνέχεια εντοπίσατε ένα κραυγαλέο σφάλμα, όπως ένα σφάλμα ή ένα κομμάτι κώδικα που δεν θα έπρεπε να υπήρχε, αλλά δεν έχετε τον χρόνο να το διορθώσετε – αυτός είναι ένας καλός λόγος για να διαγράψετε την δέσμευση. Αντί να αφήσετε αυτό το περιττό ή ελαττωματικό κομμάτι κώδικα να παραμείνει στο ιστορικό του έργου σας (και ενδεχομένως να προκαλέσει σύγχυση ή ακόμα και καταστροφικά σφάλματα στην επιδιόρθωση σφαλμάτων), μπορείτε να διαγράψετε αυτήν τη δέσμευση. Με αυτόν τον τρόπο διατηρείται το έργο σας καθαρό.
Ευαίσθητα Δεδομένα
Η κατά λάθος διάδοση ευαίσθητων δεδομένων συμβαίνει πιο συχνά από ό,τι νομίζετε. Δεν αποτελεί έκπληξη το γεγονός ότι κάτι τέτοιο μπορεί να αποτελεί σημαντικό κίνδυνο ασφάλειας, είτε προσωπικό είτε εταιρικό. Οτιδήποτε, από κωδικούς πρόσβασης και κλειδιά API έως προσωπικές πληροφορίες, θα μπορούσε να καταλήξει κρυφά στη δέσμευσή σας. Και από τη στιγμή που είναι εκεί έξω στο χώρο του έργου, οποιοσδήποτε μπορεί να έχει πρόσβαση σε αυτό και ενδεχομένως να παραβιάσει την ασφάλεια τη δική σας ή της ομάδας σας.
Αυτά τα ατυχήματα είναι ίσως ακόμη καλύτεροι λόγοι για να διαγράψετε μια δέσμευση από έναν απλό κακό κώδικα. Μπορείτε να επεξεργαστείτε τον ελαττωματικό κώδικα και να μην ανησυχείτε μήπως παραμείνει στο ιστορικό του έργου, αλλά αυτό δεν είναι ένας κίνδυνος που θα θέλατε να αναλάβετε με ευαίσθητα δεδομένα. Για παράδειγμα, εάν δεσμεύσετε κατά λάθος ένα αρχείο που περιέχει κλειδιά API, η κατάργηση αυτής της δέσμευσης εμποδίζει αυτό το κλειδί να πέσει σε λάθος χέρια.
Διατηρώντας την Ιστορία Καθαρή
Ένας άλλος σοβαρός λόγος για να διαγράψετε μια δέσμευση Git είναι να διατηρήσετε το ιστορικό του έργου σας καθαρό και απλό. Καθώς εργάζεστε στο έργο, το ιστορικό δεσμεύσεών σας γίνεται όλο και πιο γεμάτο με μικρές ενημερώσεις, πειράματα ή αλλαγές που δεν είναι πλέον σχετικές. Όταν θέλετε να ανατρέξετε στην ιστορία για οποιονδήποτε λόγο, όπως για να καταλάβετε γιατί κάνατε μια συγκεκριμένη αλλαγή ή να επιστρέψετε σε μια σταθερή κατάσταση μετά από ένα πείραμα, ένα ακατάστατο ιστορικό μπορεί να γίνει πρόβλημα.
Διαγράφοντας περιττές δεσμεύσεις, διατηρείτε το ιστορικό του έργου σας τακτοποιημένο και εύκολο για εσάς και τους άλλους στην ομάδα σας να το παρακολουθείτε. Αυτό είναι ακόμη πιο χρήσιμο πριν από τη συγχώνευση ενός κλάδου, ώστε να μπορείτε να παρουσιάσετε ένα σαφές, συνοπτικό και σχετικό ιστορικό σε όποιον εξετάζει τον κώδικά σας. Για παράδειγμα, εάν έχετε πολλές δεσμεύσεις που ήταν απλώς μικρές τροποποιήσεις σε ένα χαρακτηριστικό, μπορεί να θέλετε να τις συνθλίψετε σε μία μόνο δέσμευση για να διατηρήσετε το ιστορικό σας τακτοποιημένο.
Βέλτιστες πρακτικές και συμβουλές
Προτού διαγράψετε μια δέσμευση, ακολουθήστε ορισμένες βέλτιστες πρακτικές για να διατηρήσετε το έργο σας λειτουργικό και να αποφύγετε ανεπιθύμητες συνέπειες.
Δημιουργήστε αντίγραφα ασφαλείας της εργασίας σας
Προτού διαγράψετε οποιαδήποτε δέσμευση στο Git, είναι καλή ιδέα να δημιουργήσετε αντίγραφα ασφαλείας της εργασίας σας, ακόμα κι αν πιστεύετε ότι μπορεί να μην αξίζει να κρατήσετε. Μπορεί να φαίνεται σαν επιπλέον δουλειά, αλλά ένα αντίγραφο ασφαλείας είναι ένα δίχτυ ασφαλείας σε περίπτωση που τα πράγματα δεν πάνε όπως τα σχεδίαζαν.
Μπορείτε να δημιουργήσετε ένα αντίγραφο ασφαλείας δημιουργώντας ένα νέο κλάδο που αντικατοπτρίζει την τρέχουσα κατάσταση του αποθετηρίου σας. Για παράδειγμα, προτού διαγράψετε μια δέσμευση που εισήγαγε μια νέα δυνατότητα, δημιουργήστε έναν κλάδο αντιγράφων ασφαλείας "feature-backup". Αυτό θα σας δώσει την ελευθερία να πειραματιστείτε και να διαγράψετε δεσμεύσεις χωρίς να φοβάστε ότι θα χάσετε σημαντική δουλειά. Έτσι, αν αργότερα συνειδητοποιήσετε ότι χρειάζεστε κάτι από το διαγραμμένο commit, δεν το έχετε χάσει οριστικά. Εάν αποφασίσετε ότι δεν χρειάζεστε πλέον αυτό το αντίγραφο ασφαλείας, μπορείτε να διαγράψετε τον κλάδο Git .
Μην διαγράψετε τις δημόσιες δεσμεύσεις
Όταν εργάζεστε με δημόσια αποθετήρια, ειδικά σε έργα ανοιχτού κώδικα ή ομαδικά περιβάλλοντα, θα πρέπει να είστε ιδιαίτερα προσεκτικοί σχετικά με τη διαγραφή των δεσμεύσεων. Μόλις μια δέσμευση προωθηθεί σε ένα δημόσιο αποθετήριο και άλλοι την έχουν αποσύρει, η διαγραφή αυτής της δέσμευσης μπορεί να μπερδέψει ή να αποσπάσει την προσοχή όλων των εμπλεκομένων και να διαταράξει την εργασία. Είναι μια μορφή να τραβάτε ένα χαλί από κάτω από κάποιον – όχι μια ευχάριστη εμπειρία, αλλά μάλλον απρόσεκτη. Εάν πρέπει να διαγράψετε μια δέσμευση που είναι ήδη δημόσια, ενημερώστε την ομάδα σας ή τους συνεργάτες του έργου εκ των προτέρων, ώστε να γνωρίζουν τι συμβαίνει. Έτσι, όλοι γνωρίζουν και μπορούν να προσαρμόσουν ανάλογα τη δουλειά τους.
Χρησιμοποιήστε το Revert για Public Repos
Εάν εξακολουθείτε να θέλετε να αναιρέσετε τις αλλαγές σε ένα δημόσιο χώρο αποθήκευσης, αντί να διαγράψετε οριστικά μια δέσμευση, μπορείτε να επαναφέρετε μια συγχώνευση στο Git . Σε αντίθεση με το git reset, το οποίο ουσιαστικά ξαναγράφει το ιστορικό, το "git revert" δημιουργεί μια νέα δέσμευση που αναιρεί τις αλλαγές που έγιναν σε μια προηγούμενη δέσμευση.
Επομένως, η χρήση αυτής της εντολής είναι πολύ πιο ασφαλής και πιο διαφανής, ειδικά όταν εργάζεστε με άλλους. Επικοινωνείτε ανοιχτά στα μέλη της ομάδας σας ότι μπορεί να έχετε κάνει ένα λάθος και επιστρέφετε μια δέσμευση που το διορθώνει. Εάν προωθήσατε μια δέσμευση με ένα σημαντικό σφάλμα, το "git revert" σάς επιτρέπει να αναιρείτε γρήγορα τα αποτελέσματα αυτού του σφάλματος, ενώ διατηρείτε ανέπαφο το ιστορικό του έργου. Με αυτόν τον τρόπο διατηρείται η ακεραιότητα του ιστορικού του έργου και διατηρείται το τοπικό αποθετήριο του καθενός συνεπές με το τηλεχειριστήριο.
Κάντε διπλό έλεγχο πριν τη διαγραφή
Ένας από τους μεγαλύτερους κινδύνους κατά τη διαγραφή δεσμεύσεων στο Git είναι η απώλεια του χρόνου και της προσπάθειας που καταβάλλετε σε αυτήν τη δέσμευση. Για να το αποτρέψετε αυτό, ελέγξτε όλες τις αλλαγές σε κάθε δέσμευση που θέλετε να καταργήσετε. Χρησιμοποιήστε το "git log or git show [commit hash]" για να επιθεωρήσετε τις δεσμεύσεις. Εάν καταργείτε μια δέσμευση που πρόσθεσε πολλές λειτουργίες στον κώδικά σας, βεβαιωθείτε ότι το έργο σας δεν χρειάζεται αυτές τις λειτουργίες για να λειτουργήσει ή ότι αναπαράγονται αλλού.
Δέσμευση σε Αυτό
Υπάρχουν πολλοί λόγοι για να διαγράψετε μια δέσμευση στο Git, όπως να διατηρείτε το ιστορικό σας τακτοποιημένο, να αναιρείτε λάθη που προκαλούν σύγχυση ή να κρατάτε τις ευαίσθητες πληροφορίες σας ασφαλείς από τα αδιάκριτα βλέμματα. Όποιος κι αν είναι ο λόγος, να θυμάστε ότι υπάρχουν δύο τρόποι για να το κάνετε – "επαναφορά git" και "git revert", ο καθένας εξυπηρετεί διαφορετικό σκοπό, οπότε επιλέξτε αυτόν που είναι κατάλληλος για το έργο σας. Μπορείτε επίσης να μετονομάσετε τον κλάδο Git για περισσότερη σαφήνεια.
Χρειάστηκε ποτέ να διαγράψετε μια δέσμευση στο Git; Ποια ήταν η εμπειρία σας και έχετε κάποιες συμβουλές να μοιραστείτε; Αφήστε ένα σχόλιο παρακάτω και συνεχίστε τη συζήτηση.