Κλάδοι και ιστορικό

7 λεπτά

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


1 — Γιατί υπάρχουν κλάδοι;

Ένας κλάδος (branch) είναι μια γραμμή ανάπτυξης ανεξάρτητη. Σας επιτρέπει να εργάζεστε σε μια νέα λειτουργία χωρίς να αγγίζετε την κύρια έκδοση (main), που παραμένει σταθερή.

Αναλογία: ένα κοινόχρηστο έγγραφο. Αντί να επεξεργάζεστε απευθείας την επίσημη έκδοση (κίνδυνος να τα χαλάσετε όλα), εργάζεστε σε ένα αντίγραφο εργασίας (τον κλάδο). Μόλις είστε ικανοποιημένοι, συγχωνεύετε τις αλλαγές σας στο πρωτότυπο.

Γιατί είναι απαραίτητο:

  • Απομόνωση: μια πειραματική εργασία δεν χαλάει ποτέ τη σταθερή έκδοση.
  • Συνεργασία: ο καθένας εργάζεται στον δικό του κλάδο, χωρίς να εμποδίζει τους άλλους.
  • Οργάνωση: ένας κλάδος = μια λειτουργία ή μια διόρθωση.
Τυπικός κλάδοςΡόλος
mainΣταθερή έκδοση, έτοιμη προς παράδοση
feature/...Νέα λειτουργία σε εξέλιξη
fix/...Διόρθωση σφάλματος

↑ Επιστροφή στην αρχή


2 — Δημιουργία και αλλαγή κλάδου
bash
# Λίστα των κλάδων (ο τρέχων σημειώνεται με *)
git branch

# Δημιουργία ενός κλάδου
git branch feature-connexion

# Αλλαγή κλάδου
git switch feature-connexion

# Δημιουργία ΚΑΙ εναλλαγή σε μία εντολή (συνιστάται)
git switch -c feature-connexion
Σύγχρονη εντολήΠαλαιότερο ισοδύναμοΑποτέλεσμα
git switch nomgit checkout nomΕναλλαγή σε έναν κλάδο
git switch -c nomgit checkout -b nomΔημιουργία και εναλλαγή
git branchΛίστα των κλάδων
git branch -d nomΔιαγραφή ενός συγχωνευμένου κλάδου

Το git switch είναι η σύγχρονη εντολή αφιερωμένη στους κλάδους. Το git checkout λειτουργεί ακόμη αλλά κάνει πάρα πολλά πράγματα ταυτόχρονα — προτιμήστε το switch για τους κλάδους.

🔧 Μίνι-άσκηση — Γράψτε την εντολή που δημιουργεί τον κλάδο feature-login και εναλλάσσεται σε αυτόν σε μία μόνο ενέργεια.

✅ Δείτε μια λύση
bash
git switch -c feature-login

↑ Επιστροφή στην αρχή


3 — Συγχώνευση ενός κλάδου

Συγχώνευση (merge) σημαίνει ενσωμάτωση των αλλαγών ενός κλάδου σε έναν άλλο — τυπικά, επιστροφή της ολοκληρωμένης λειτουργίας σας στο main.

bash
# 1. Τοποθέτηση στον κλάδο που θα ΛΑΒΕΙ τις αλλαγές
git switch main

# 2. Συγχώνευση του κλάδου λειτουργίας μέσα σε αυτόν
git merge feature-connexion
Τύπος συγχώνευσηςΠότε;Αποτέλεσμα
Fast-forwardΤο main δεν έχει κινηθεί από τον κλάδοΤο main προχωρά απλώς μπροστά
Merge commitΤο main έχει επίσης εξελιχθείΈνα commit συγχώνευσης ενώνει τις δύο ιστορίες
bash
# Μετά από μια επιτυχημένη συγχώνευση, μπορείτε να διαγράψετε τον κλάδο
git branch -d feature-connexion

Απλός κανόνας: τοποθετείστε στον κλάδο προορισμού (main), έπειτα συγχωνεύστε τον κλάδο πηγής μέσα σε αυτόν. «Είμαι στο main, απορροφώ το feature».

🔧 Μίνι-άσκηση — Βρίσκεστε στο feature-login και η εργασία ολοκληρώθηκε. Γράψτε τις δύο εντολές για να συγχωνεύσετε αυτόν τον κλάδο στο main.

✅ Δείτε μια λύση
bash
git switch main
git merge feature-login

↑ Επιστροφή στην αρχή


4 — Διαχείριση μιας σύγκρουσης συγχώνευσης

Μια σύγκρουση (conflict) εμφανίζεται όταν δύο κλάδοι έχουν τροποποιήσει την ίδια γραμμή του ίδιου αρχείου. Το Git δεν μπορεί να επιλέξει στη θέση σας: σας ζητά να αποφασίσετε.

Το Git εισάγει δείκτες στο αρχείο σε σύγκρουση:

<<<<<<< HEAD
κείμενο του τρέχοντος κλάδου (main)
=======
κείμενο του συγχωνευμένου κλάδου (feature)
>>>>>>> feature-connexion

Για να επιλύσετε:

  1. Ανοίξτε το αρχείο, επιλέξτε το σωστό περιεχόμενο (ή συνδυάστε τα δύο).
  2. Διαγράψτε τους δείκτες <<<<<<<, =======, >>>>>>>.
  3. git add fichier έπειτα git commit για να οριστικοποιήσετε τη συγχώνευση.

Μια σύγκρουση δεν είναι σοβαρό σφάλμα: είναι το Git που σας προστατεύει αρνούμενο να μαντέψει. Μείνετε ήρεμοι, διαβάστε τις δύο εκδόσεις, κρατήστε τη σωστή.

🔧 Μίνι-άσκηση — Αναφέρετε τους τρεις δείκτες που εισάγει το Git σε ένα αρχείο σε σύγκρουση και που πρέπει να διαγραφούν μετά την επίλυση.

✅ Δείτε μια λύση

<<<<<<< , ======= και >>>>>>>. Μόλις επιλεγεί το σωστό περιεχόμενο, τους διαγράφετε, έπειτα κάνετε git add και git commit.

↑ Επιστροφή στην αρχή


5 — Συμβουλευτείτε το ιστορικό
bash
# Πλήρες ιστορικό
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), επιτρέπει να κατανοήσετε γιατί ο κώδικας βρίσκεται στην τρέχουσα κατάστασή του.

🔧 Μίνι-άσκηση — Γράψτε την εντολή που εμφανίζει το ιστορικό με συμπαγή τρόπο, με το γράφημα των κλάδων και όλους τους κλάδους.

✅ Δείτε μια λύση
bash
git log --oneline --graph --all

↑ Επιστροφή στην αρχή


6 — Κουίζ — Κλάδοι και ιστορικό

Question 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 την καθιστά συμπαγή.

↑ Επιστροφή στην αρχή


7 — Πρακτική — Μια λειτουργία στον δικό της κλάδο

Οδηγία

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


Διόρθωση — Αναμενόμενη ακολουθία εντολών

bash
# 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.

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

↑ Επιστροφή στην αρχή


8 — Σύνοψη

Σημεία που πρέπει να θυμάστε

  1. Ένας κλάδος = μια απομονωμένη γραμμή ανάπτυξης· το main παραμένει σταθερό.
  2. git switch -c nom δημιουργεί και εναλλάσσεται σε έναν κλάδο.
  3. Συγχώνευση: τοποθετείστε στον προορισμό (main), έπειτα git merge source.
  4. Μια σύγκρουση εμφανίζεται στις ίδιες γραμμές που τροποποιήθηκαν και από τις δύο πλευρές· την επιλύετε χειροκίνητα.
  5. git log --oneline --graph --all οπτικοποιεί την ιστορία και τους κλάδους.

Η συνέχεια

Μάθημα 08 — Απομακρυσμένο αποθετήριο: κοινοποίηση της εργασίας σας στο διαδίκτυο και συνεργασία μέσω ενός διακομιστή Git (GitHub).

↑ Επιστροφή στην αρχή


Με την επιφύλαξη παντός δικαιώματος. Οποιαδήποτε αναπαραγωγή, διάδοση, χρήση ή προσαρμογή αυτού του μαθήματος, εν όλω ή εν μέρει, απαγορεύεται αυστηρά χωρίς την προηγούμενη γραπτή άδεια του Dr. Haythem REHOUMA.

Μάθημα δημιουργημένο από τον Dr. Haythem REHOUMA — Ανάπτυξη και ανάπτυξη λύσεων δεδομένων