Ένας κλάδος (branch) είναι μια γραμμή ανάπτυξης ανεξάρτητη. Σας επιτρέπει να εργάζεστε σε μια νέα λειτουργία χωρίς να αγγίζετε την κύρια έκδοση (main), που παραμένει σταθερή.
Αναλογία: ένα κοινόχρηστο έγγραφο. Αντί να επεξεργάζεστε απευθείας την επίσημη έκδοση (κίνδυνος να τα χαλάσετε όλα), εργάζεστε σε ένα αντίγραφο εργασίας (τον κλάδο). Μόλις είστε ικανοποιημένοι, συγχωνεύετε τις αλλαγές σας στο πρωτότυπο.
Γιατί είναι απαραίτητο:
| Τυπικός κλάδος | Ρόλος |
|---|---|
main | Σταθερή έκδοση, έτοιμη προς παράδοση |
feature/... | Νέα λειτουργία σε εξέλιξη |
fix/... | Διόρθωση σφάλματος |
# Λίστα των κλάδων (ο τρέχων σημειώνεται με *)
git branch
# Δημιουργία ενός κλάδου
git branch feature-connexion
# Αλλαγή κλάδου
git switch feature-connexion
# Δημιουργία ΚΑΙ εναλλαγή σε μία εντολή (συνιστάται)
git switch -c feature-connexion| Σύγχρονη εντολή | Παλαιότερο ισοδύναμο | Αποτέλεσμα |
|---|---|---|
git switch nom | git checkout nom | Εναλλαγή σε έναν κλάδο |
git switch -c nom | git checkout -b nom | Δημιουργία και εναλλαγή |
git branch | — | Λίστα των κλάδων |
git branch -d nom | — | Διαγραφή ενός συγχωνευμένου κλάδου |
Το
git switchείναι η σύγχρονη εντολή αφιερωμένη στους κλάδους. Τοgit checkoutλειτουργεί ακόμη αλλά κάνει πάρα πολλά πράγματα ταυτόχρονα — προτιμήστε τοswitchγια τους κλάδους.
🔧 Μίνι-άσκηση — Γράψτε την εντολή που δημιουργεί τον κλάδο feature-login και εναλλάσσεται σε αυτόν σε μία μόνο ενέργεια.
git switch -c feature-loginΣυγχώνευση (merge) σημαίνει ενσωμάτωση των αλλαγών ενός κλάδου σε έναν άλλο — τυπικά, επιστροφή της ολοκληρωμένης λειτουργίας σας στο main.
# 1. Τοποθέτηση στον κλάδο που θα ΛΑΒΕΙ τις αλλαγές
git switch main
# 2. Συγχώνευση του κλάδου λειτουργίας μέσα σε αυτόν
git merge feature-connexion| Τύπος συγχώνευσης | Πότε; | Αποτέλεσμα |
|---|---|---|
| Fast-forward | Το main δεν έχει κινηθεί από τον κλάδο | Το main προχωρά απλώς μπροστά |
| Merge commit | Το main έχει επίσης εξελιχθεί | Ένα commit συγχώνευσης ενώνει τις δύο ιστορίες |
# Μετά από μια επιτυχημένη συγχώνευση, μπορείτε να διαγράψετε τον κλάδο
git branch -d feature-connexionΑπλός κανόνας: τοποθετείστε στον κλάδο προορισμού (
main), έπειτα συγχωνεύστε τον κλάδο πηγής μέσα σε αυτόν. «Είμαι στο main, απορροφώ το feature».
🔧 Μίνι-άσκηση — Βρίσκεστε στο feature-login και η εργασία ολοκληρώθηκε. Γράψτε τις δύο εντολές για να συγχωνεύσετε αυτόν τον κλάδο στο main.
git switch main
git merge feature-loginΜια σύγκρουση (conflict) εμφανίζεται όταν δύο κλάδοι έχουν τροποποιήσει την ίδια γραμμή του ίδιου αρχείου. Το Git δεν μπορεί να επιλέξει στη θέση σας: σας ζητά να αποφασίσετε.
Το Git εισάγει δείκτες στο αρχείο σε σύγκρουση:
<<<<<<< HEAD
κείμενο του τρέχοντος κλάδου (main)
=======
κείμενο του συγχωνευμένου κλάδου (feature)
>>>>>>> feature-connexionΓια να επιλύσετε:
<<<<<<<, =======, >>>>>>>.git add fichier έπειτα git commit για να οριστικοποιήσετε τη συγχώνευση.Μια σύγκρουση δεν είναι σοβαρό σφάλμα: είναι το Git που σας προστατεύει αρνούμενο να μαντέψει. Μείνετε ήρεμοι, διαβάστε τις δύο εκδόσεις, κρατήστε τη σωστή.
🔧 Μίνι-άσκηση — Αναφέρετε τους τρεις δείκτες που εισάγει το Git σε ένα αρχείο σε σύγκρουση και που πρέπει να διαγραφούν μετά την επίλυση.
<<<<<<< , ======= και >>>>>>>. Μόλις επιλεγεί το σωστό περιεχόμενο, τους διαγράφετε, έπειτα κάνετε git add και git commit.
# Πλήρες ιστορικό
git log
# Συμπαγής έκδοση (μία γραμμή ανά commit)
git log --oneline
# Με το γράφημα των κλάδων και των συγχωνεύσεων
git log --oneline --graph --all
# Εμφάνιση των τροποποιήσεων ενός commit
git show <hash>
# Εμφάνιση ποιος τροποποίησε κάθε γραμμή ενός αρχείου
git blame fichier.txt| Εντολή | Απαντά στην ερώτηση |
|---|---|
git log | Ποια είναι η ιστορία του έργου; |
git log --oneline --graph --all | Πώς διακλαδώθηκαν οι κλάδοι; |
git show <hash> | Τι άλλαξε ακριβώς αυτό το commit; |
git blame fichier | Ποιος έγραψε αυτή τη γραμμή, και πότε; |
Το ιστορικό του Git είναι μια μηχανή του χρόνου. Καλά χρησιμοποιημένο (με καλά μηνύματα commit), επιτρέπει να κατανοήσετε γιατί ο κώδικας βρίσκεται στην τρέχουσα κατάστασή του.
🔧 Μίνι-άσκηση — Γράψτε την εντολή που εμφανίζει το ιστορικό με συμπαγή τρόπο, με το γράφημα των κλάδων και όλους τους κλάδους.
git log --oneline --graph --allQuestion 1 : Σε τι χρησιμεύει ένας κλάδος;
a) Να διαγράψει το ιστορικό
b) Να αναπτύσσει απομονωμένα χωρίς να αγγίζει την κύρια έκδοση
c) Να συνδεθεί στο GitHub
d) Να μεταγλωττίσει τον κώδικα
✅ Απάντηση: b) — Ένας κλάδος είναι μια ανεξάρτητη γραμμή ανάπτυξης: απομονώνει την εργασία σε εξέλιξη από τον σταθερό κλάδο main.
Question 2 : Ποια εντολή δημιουργεί έναν κλάδο ΚΑΙ εναλλάσσεται σε αυτόν;
a) git branch nom
b) git switch -c nom
c) git merge nom
d) git log nom
✅ Απάντηση: b) — Το git switch -c nom δημιουργεί τον κλάδο και τοποθετείται σε αυτόν σε μία εντολή (σύγχρονο ισοδύναμο του git checkout -b).
Question 3 : Για να συγχωνεύσω το feature στο main, πρέπει πρώτα…
a) Να τοποθετηθώ στο feature και έπειτα να κάνω git merge main
b) Να τοποθετηθώ στο main και έπειτα να κάνω git merge feature
c) Να διαγράψω το main
d) Να κάνω git init
✅ Απάντηση: b) — Τοποθετείστε στον κλάδο προορισμού (main), έπειτα συγχωνεύστε τον κλάδο πηγής (feature) μέσα σε αυτόν.
Question 4 : Πότε εμφανίζεται μια σύγκρουση συγχώνευσης;
a) Όταν δύο κλάδοι τροποποιούν την ίδια γραμμή του ίδιου αρχείου
b) Σε κάθε συγχώνευση, συστηματικά
c) Όταν δημιουργείτε έναν κλάδο
d) Όταν εγκαθιστάτε το Git
✅ Απάντηση: a) — Το Git δεν μπορεί να επιλέξει ανάμεσα σε δύο τροποποιήσεις της ίδιας γραμμής: σηματοδοτεί μια σύγκρουση προς χειροκίνητη επίλυση.
Question 5 : Ποια εντολή εμφανίζει το ιστορικό με το γράφημα των κλάδων;
a) git status
b) git log --oneline --graph --all
c) git branch -d
d) git add .
✅ Απάντηση: b) — Τα --graph --all σχεδιάζουν τη δομή των κλάδων και των συγχωνεύσεων· το --oneline την καθιστά συμπαγή.
Σε ένα υπάρχον αποθετήριο, δημιουργήστε έναν κλάδο, κάντε ένα commit σε αυτόν, έπειτα συγχωνεύστε τον στο main και συμβουλευτείτε το γράφημα.
# 1. Εκκίνηση από ενημερωμένο main
git switch main
# 2. Δημιουργία και εναλλαγή σε έναν κλάδο λειτουργίας
git switch -c feature-titre
# 3. Εργασία και commit στον κλάδο
echo "## Νέα ενότητα" >> README.md
git add README.md
git commit -m "Προσθέτει μια νέα ενότητα στο README"
# 4. Επιστροφή στο main και συγχώνευση
git switch main
git merge feature-titre
# 5. Καθαρισμός του συγχωνευμένου κλάδου
git branch -d feature-titre
# 6. Οπτικοποίηση του ιστορικού
git log --oneline --graph --allΑναμενόμενο αποτέλεσμα: το commit του κλάδου εμφανίζεται στο ιστορικό του main, και το git branch δεν εμφανίζει πλέον το feature-titre.
Αυτός ο κύκλος — δημιουργία κλάδου, εργασία, συγχώνευση, διαγραφή — είναι η καθημερινή ροή εργασίας ενός προγραμματιστή. Θα τον επαναλάβετε εκατοντάδες φορές.
main παραμένει σταθερό.git switch -c nom δημιουργεί και εναλλάσσεται σε έναν κλάδο.main), έπειτα git merge source.git log --oneline --graph --all οπτικοποιεί την ιστορία και τους κλάδους.Μάθημα 08 — Απομακρυσμένο αποθετήριο: κοινοποίηση της εργασίας σας στο διαδίκτυο και συνεργασία μέσω ενός διακομιστή Git (GitHub).
Με την επιφύλαξη παντός δικαιώματος. Οποιαδήποτε αναπαραγωγή, διάδοση, χρήση ή προσαρμογή αυτού του μαθήματος, εν όλω ή εν μέρει, απαγορεύεται αυστηρά χωρίς την προηγούμενη γραπτή άδεια του Dr. Haythem REHOUMA.
Μάθημα δημιουργημένο από τον Dr. Haythem REHOUMA — Ανάπτυξη και ανάπτυξη λύσεων δεδομένων