Διατηρήστε το ιστορικό του αποθετηρίου Git σας καθαρό με Squashing Commits

Κουραστήκατε από τα ακατάστατα ιστορικά δεσμεύσεων που γεμίζουν τα αποθετήρια του Git και τα αιτήματα έλξης; Ευτυχώς, το Git έχει τη δυνατότητα να “squash commits”, το οποίο συγχωνεύει πολλαπλές μικρές δεσμεύσεις σε ένα. Αυτό σας βοηθά να διατηρείτε το ιστορικό του κώδικα καθαρό και οργανωμένο και είναι εύκολο να το κάνετε με μερικές εντολές.

Γιατί το Squash Commits;

Ένας από τους χρυσούς κανόνες της καλής εθιμοτυπίας Git είναι να δεσμεύεστε συχνά με καλά μηνύματα που εξηγούν τι κάνουν οι δεσμεύσεις. Ωστόσο, αυτό μπορεί γρήγορα να γίνει πρόβλημα εάν πιεστούν πάρα πολλές δεσμεύσεις. Σε τελική ανάλυση, κανείς δεν θέλει να εξετάσει ένα αίτημα έλξης με 40 διαφορετικές δεσμεύσεις, όλα έτοιμα για συγχώνευση σε κύριο — είναι απλώς υπερβολική ακαταστασία.

Επομένως, πριν προχωρήσετε σε ένα απομακρυσμένο αποθετήριο όπως το GitHub, είναι καλή πρακτική

σκουός

αυτά τα commit, τα οποία θα τα συγχωνεύσουν όλα σε ένα μεγάλο commit. Όλα τα μηνύματα δέσμευσης από αυτές τις δεσμεύσεις θα προστεθούν στο “squash commit” έτσι ώστε να εξακολουθούν να είναι ορατά όταν πηγαίνετε να τα προωθήσετε στο GitHub ή να υποβάλετε το αίτημα έλξης σας.

Επίσης, δεν είναι πάντα απαραίτητο να σβήνετε κάθε δέσμευση, καθώς μερικές φορές είναι ωραίο να χωρίζετε τα πράγματα εάν εργάζεστε σε πολλά διαφορετικά αρχεία ή μέρη του αποθετηρίου. Ωστόσο, εάν κάνετε απλώς πολλές αλλαγές σε ένα μόνο αρχείο με την πάροδο του χρόνου, θα πρέπει πιθανώς να καταργήσετε αυτές τις δεσμεύσεις.

Είναι σημαντικό να σημειωθεί ότι

δεν μπορείτε να squash commit που έχουν ήδη προωθηθεί στο GitHub

χωρίς δύναμη ώθησης, η οποία είναι μια καταστροφική λειτουργία. Το Squashing commits αντικαθιστά το ιστορικό Git, κάτι που είναι εντάξει αν το κάνετε μόνο στον τοπικό σας υπολογιστή. Εάν το κάνετε στο GitHub, απαιτεί μια ώθηση δύναμης, πράγμα που σημαίνει ότι όλα τα μέλη της ομάδας σας πρέπει να επανακλωνοποιήσουν το αποθετήριο για να αποφύγουν συγκρούσεις.

Για να αποφύγετε αυτά τα ζητήματα, είναι καλύτερο να σβήσετε τις δεσμεύσεις πριν προχωρήσετε στο απομακρυσμένο αποθετήριο. Δεδομένου ότι αυτό είναι συνήθως όταν θέλετε να το κάνετε αυτό ούτως ή άλλως, συνήθως δεν είναι πρόβλημα.

Το Squashing Git δεσμεύεται με τη συγχώνευση git

Υπάρχουν δύο διαφορετικοί τρόποι για να squash commits, αφού δεν υπάρχει επίσημο “

git squash

” εντολή. Ένα από τα πιο εύκολα είναι η χρήση

git merge

με την

--squash

σημαία. Αυτή η τεχνική θα συγχωνεύσει τις τελευταίες N δεσμεύσεις μαζί σε ένα.

Αρχικά, θα θελήσετε να βεβαιωθείτε ότι το αποθετήριο σας είναι εντελώς καθαρό, χωρίς ενεργές αλλαγές. Μπορείς να ελέγξεις

git status

για να επαληθεύσετε ότι δεν έχετε τοπικές αλλαγές που θα απορριφθούν από την επαναφορά.

Στη συνέχεια, θα θέλετε να επαναφέρετε τον κλάδο στη θέση που βρισκόταν

πριν

οποιαδήποτε από τις δεσμεύσεις που θα θέλατε να συντρίψετε μαζί. Για παράδειγμα, για να σβήσετε τις τρεις τελευταίες δεσμεύσεις, θα χρησιμοποιούσατε

HEAD~3

το οποίο είναι τεχνικά το τέταρτο commit στο ιστορικό, αλλά θα αφαιρέσει και τα τρία commit από το ιστορικό σας.

git reset --hard HEAD~3

Μπορείτε επίσης να χρησιμοποιήσετε έναν κατακερματισμό commit SHA-1 για να αναφέρετε απευθείας μια δέσμευση. Στη συνέχεια, τρέχουμε

git merge --squash

με τον στόχο συγχώνευσης να είναι

{1}

που είναι η θέση της ΚΕΦΑΛΗΣ πριν από την τελευταία εντολή.

git merge --squash '{1}'

Το Git έχει ήδη πραγματοποιήσει όλες τις αλλαγές με το κατάλληλο μήνυμα δέσμευσης σε αυτό το σημείο, αλλά πρέπει να δεσμευτεί:

git commit

Μόλις γίνει αυτό, είστε ελεύθεροι να ωθήσετε όλες τις δεσμεύσεις στο αποθετήριο προέλευσης ανοδικής ροής.

Περισσότερος έλεγχος στο Squashing με διαδραστική επαναφορά

Εάν δεν θέλετε να συνθλίψετε τα πάντα σε μια δέσμευση bit, μπορείτε να εκτελέσετε μια διαδραστική επαναφορά για να επιλέξετε μόνο τις δεσμεύσεις που θέλετε να στριμώξετε. Η επαναφορά μπορεί να είναι περίπλοκη, αλλά είναι εύκολο να γίνει με τα σωστά βήματα.

Αρχικά, ξεκινήστε το διαδραστικό rebase στοχεύοντας τη δέσμευση πριν από την τελευταία δέσμευση με δυνατότητα squash:

git rebase -i HEAD~3

Αυτό θα ανοίξει ένα πρόγραμμα επεξεργασίας κειμένου, όπου θα θέλετε να αλλάξετε το “pick” σε “squash” για κάθε δέσμευση που θέλετε να συγχωνεύσετε.

Στη συνέχεια, το Git θα ανοίξει έναν άλλο επεξεργαστή, επιτρέποντάς σας να δημιουργήσετε ένα νέο μήνυμα δέσμευσης για τη συνδυασμένη δέσμευση. Αποθηκεύστε το και η επαναφορά πρέπει να ολοκληρωθεί.

Η επαναφορά της βάσης με αυτόν τον τρόπο θα συγχωνεύσει όλες τις συμπιεσμένες δεσμεύσεις στην επόμενη δέσμευση πάνω από αυτές. Σε αυτήν την περίπτωση, το δεύτερο και το τρίτο commit συγχωνεύτηκαν στο πρώτο.

Το Squashing Git δεσμεύεται με ένα Git GUI

Όπως οι περισσότερες ενέργειες στο Git, το squashing commits με μια διεπαφή είναι πολύ πιο εύκολο από το να θυμόμαστε και να πληκτρολογούμε εντολές κάθε φορά. Στην πραγματικότητα, στο GitKraken, μπορείτε απλά να κάνετε Control-Click στις δεσμεύσεις που θέλετε να στριμώξετε και να κάνετε δεξί κλικ για να πατήσετε “Squash 2 commits”:

Μπορείτε να διαβάσετε τον οδηγό μας για τους πελάτες GUI Git για να μάθετε περισσότερα.


ΣΧΕΤΙΖΕΤΑΙ ΜΕ:



Πρέπει να χρησιμοποιήσετε GUI Git Client;


HowToGeek.com



You might also like


Leave A Reply



Cancel Reply

Your email address will not be published.