Git
Chapters ▾ 2nd Edition

A3.4 Appendix C: Εντολές Git - Διακλάδωση και συγχώνευση

Διακλάδωση και συγχώνευση

Υπάρχουν μόνο μερικές εντολές που υλοποιούν το μεγαλύτερο μέρος της λειτουργικότητας διακλάδωσης και συγχώνευσης στο Git.

git branch

Η εντολή git branch είναι στην πραγματικότητα ένα εργαλείο διαχείρισης κλάδων. Μπορεί να απαριθμήσει τους κλάδους που έχουμε, να δημιουργήσει έναν νέο κλάδο, να διαγράψει κλάδους και να μετονομάσοει κλάδους.

Το μεγαλύτερο μέρος του κεφαλαίου Διακλαδώσεις στο Git είναι αφιερωμένο στην εντολή branch και χρησιμοποιείται σε όλο το κεφάλαιο. Αρχικά παρουσιάζεται στην ενότητα Δημιουργία νέου κλάδου και τα περισσότερα από τα χαρακτηριστικά της (εισαγωγή και διαγραφή) αναλύονται στην ενότητα Διαχείριση κλάδων.

Στην ενότητα Παρακολούθηση κλάδων χρησιμοποιούμε την επιλογή git branch -u για να δημιουργήσουμε έναν παρακολουθούμενο κλάδο.

Τέλος, στην ενότητα Αναφορές του Git βλέπουμε μερικά από τα πράγματα που κάνει στο παρασκήνιο.

git checkout

Η εντολή git checkout χρησιμοποιείται για να μεταβούμε από έναν κλάδο σε άλλο και να ενημερώοσουμε το περιεχόμενο στον κατάλογο εργασίας μας.

Αρχικά συναντάμε την εντολή στην ενότητα Μετάβαση από κλάδο σε κλάδο μαζί με την εντολή git branch.

Βλέπουμε πώς να το χρησιμοποιήσουμε για να αρχίσουμε να παρακολουθούμε κλάδους με τη σημαία --track στην ενότητα Παρακολούθηση κλάδων.

Τη χρησιμοποιούμε για την επανεισαγωγή των συγκρούσεων αρχείων με την --conflict=diff3 στην ενότητα Checking Out Conflicts.

Βλέπουμε λεπτομερώς τη σχέση της με την git reset στην ενότητα Απομυθοποίηση της reset.

Τέλος, βλέπουμε κάποιες λεπτομέρειες υλοποίησής της στην ενότητα Ο HEAD.

git merge

Το εργαλείο git merge χρησιμοποιείται για τη συγχώνευση ενός ή περισσοτέρων κλάδων στον κλάδο στον οποίο έχουμε κάνει checkout. Στη συνέχεια ωθεί τον τρέχοντα κλάδο στο αποτέλεσμα της συγχώνευσης.

Η εντολή git merge εισάγεται για πρώτη φορά στην ενότητα Διακλαδώσεις —τα βασικά. Παρότι χρησιμοποιείται σε διάφορα σημεία του βιβλίου, υπάρχουν πολύ λίγες παραλλαγές της εντολής merge --βασικά η git merge <κλάδος> με το όνομα του μόνου κλάδου που θέλουμε να συγχωνεύσουμε.

Καλύψαμε πώς κάνουμε μία συναρμοσμένη (squashed) συγχώνευση, στην οποία το Git συγχωνεύει το έργο, αλλά προσποιείται ότι πρόκειται για μια νέα υποβολή χωρίς να καταγράφει το ιστορικό του κλάδου που συγχωνεύουμε, στο τέλος της ενότητας Αποσχισμένα δημόσια έργα.

Πολλές πληροφορίες για τη διαδικασία και εντολή συγχώνευσης συμπερλιλαμβανομένης της εντολής -Xignore-space-change' και της σημαίας `--abort, όσον αφορά στη ματαίωση μίας προβληματικής συγχώνευσης, υπάρχουν στην ενότητα Συγχωνεύσεις για προχωρημένους.

Μάθαμε πώς να επαληθεύουμε τις υπογραφές πριν τη συγχώνευση αν το έργο μας χρησιμοποιεί την υπογραφή GPG στην ενότητα Υπογραφή υποβολών.

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

git mergetool

Η εντολή git mergetool απλά εκκινεί έναν εξωτερικό βοηθό συγχώνευσης σε περίπτωση που έχουμε προβλήματα με κάποια συγχώνευση στο Git.

Την αναφέρουμε στα γρήγορα στην ενότητα Βασικές συγκρούσεις συγχωνεύσεων και βλέπουμε λεπτομερώς πώς να υλοποιήσουμε το δικό μας εξωτερικό εργαλείο συγχώνευσης στην ενότητα Εξωτερικά εργαλεία συγχώνευσης και diff.

git log

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

Αυτή η εντολή χρησιμοποιείται σχεδόν σε κάθε κεφάλαιο του βιβλίου για να επιδείξει την ιστορία ενός έργου.

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

Στην ενότητα Δημιουργία νέου κλάδου τη χρησιμοποιούμε με την επιλογή --decorate για να απεικονίσουμε εύκολα τη θέση των δεικτών του κλάδου μας· επίσης χρησιμοποιούμε την επιλογή --graph για να δούμε με τι μοιάζουν αποκλίνουσες ιστορίες.

Στις ενότητες Ιδιωτικές μικρές ομάδες και Εύρος υποβολών καλύπτουμε τη σύνταξη branchA..branchB της εντολής git log για να δούμε ποιες υποβολές είναι μοναδικές σε έναν κλάδο σε σχέση με έναν άλλο κλάδο. Στην ενότητα Εύρος υποβολών βλέπουμε ακριβώς αυτό σε αρκετά μεγάλη έκταση.

Στις ενότητες Συγχώνευση μητρώου και Τριπλή τελεία καλύπτουμε τη χρήση της μορφής branchA...branchB και τη σύνταξη --left-right για να δούμε τι υπάρχει σε έναν κλάδο ή τον άλλο αλλά όχι και στους δύο. Στην ενότητα Συγχώνευση μητρώου εξετάζουμε επίσης πώς χρησιμοποιούμε την επιλογή --merge για να βοηθήσουμε στην αποσφαλμάτωση συγκρούσεων συγχώνευσης καθώς και την επιλογή --cc για να εξετάσουμε τις συγκρούσεις συγχώνευσης υποβολών στο ιστορικό μας.

Στην ενότητα RefLog Shortnames χρησιμοποιούμε την επιλογή -g για να δούμε το reflog του Git μέσα από αυτό το το εργαλείο αντί να κάνουμε διέλευση κλάδων.

Στην ενότητα Αναζήτηση εξετάζουμε τις επιλογές -S και -L για να κάνουμε αρκετά εξεζητημένες αναζητήσεις για κάτι που συνέβη στο παρελθόν στον κώδικα, όπως για παράδειγμα το ιστορικό μιας συνάρτησης.

Στην ενότητα Υπογραφή υποβολών βλέπουμε πώς χρησιμοποιούμε την --show-signature για να προσθέσουμε μια συμβολοσειρά επικύρωσης σε κάθε υποβολή στην έξοδο της git log ανάλογα με το αν είναι έγκυρα υπογεγραμμένη ή όχι.

git stash

Η εντολή git stash χρησιμοποιείται για την προσωρινή αποθήκευση εργασιών που δεν έχουν υποβληθεί, προκειμένου να καθαριστεί ο κατάλογος εργασίας μας χωρίς να χρειάζεται να εκτελέσουμε εργασίες που δεν έχουν ολοκληρωθεί σε κάποιον κλάδο.

Καλύπτεται εξ ολοκλήρου στην ενότητα stash και clean.

git tag

Η εντολή git tag χρησιμοποιείται για να προσαρτήσει έναν μόνιμο σελιδοδείκτη σε ένα συγκεκριμένο σημείο στο ιστορικό του κώδικα. Γενικά αυτό χρησιμοποιείται για πράγματα όπως εκδόσεις κυκλοφορίας λογισμικού (release).

Αυτή η εντολή εισάγεται και καλύπτεται λεπτομερώς στην ενότητα Χρησιμοποιώντας ετικέτες και τη χρησιμοποιούμε στην πράξη στην ενότητα Δημιουργία ετικετών στις εκδόσεις μας.

Καλύπτουμε επίσης τον τρόπο δημιουργίας μιας ετικέτας που έχει υπογραφεί με GPG με τη σημαία -s και την επαλήθευση ετικετών με τη σημαία -v στην ενότητα Υπογραφή της δουλειάς μας.