Ένα pull request (PR), που ονομάζεται επίσης merge request στο GitLab, είναι μια αίτηση ενσωμάτωσης: «εδώ είναι η δουλειά μου σε έναν κλάδο, παρακαλώ αναθεωρήστε την και έπειτα συγχωνεύστε την στο main». Είναι το σημείο συνάντησης μεταξύ του κώδικα και της ομάδας.
Ένα PR δεν είναι μόνο ένα κουμπί «συγχώνευση». Είναι ένας χώρος συζήτησης γύρω από τον κώδικα: σχόλια, προτάσεις, αυτόματες δοκιμές, επικύρωση. Εκεί κρίνεται η ποιότητα.
| Ένα PR χρησιμεύει για… | Συγκεκριμένα |
|---|---|
| Αναθεώρηση του κώδικα | Ένας συνάδελφος εντοπίζει σφάλματα και βελτιώσεις |
| Ενεργοποίηση της CI | Αυτόματες δοκιμές + build στον κλάδο |
| Τεκμηρίωση της αλλαγής | Τίτλος + περιγραφή εξηγούν το «γιατί» |
| Ιχνηλάτηση της απόφασης | Ποιος ενέκρινε, πότε, γιατί |
Πριν ανοίξετε ένα PR, πρέπει να έχετε στείλει τον κλάδο σας στο GitHub.
Βήμα 1 — Αποστολή του κλάδου:
git switch feature/recherche
git push -u origin feature/rechercheΒήμα 2 — Άνοιγμα του PR (δύο επιλογές):
main) και τον κλάδο σύγκρισης (feature/recherche).# Δημιουργία του PR χωρίς να φύγετε από το τερματικό
gh pr create --base main --head feature/recherche \
--title "Ajout de la recherche" \
--body "Implémente la barre de recherche avec filtres."Μια καλή περιγραφή PR περιέχει:
| Ενότητα | Περιεχόμενο |
|---|---|
| Τι | Τι κάνει το PR σε μία πρόταση |
| Γιατί | Το πρόβλημα ή η ανάγκη που επιλύεται |
| Πώς να δοκιμάσετε | Βήματα επαλήθευσης |
| Σύνδεσμος | Αριθμός του συνδεδεμένου issue (π.χ. Closes #42) |
Ο τίτλος και η περιγραφή διαβάζονται από ανθρώπους βιαστικούς. Να είστε σαφείς: «Διορθώνει το crash στη σύνδεση» αξίζει χίλιες φορές περισσότερο από «fix bug».
🔧 Μίνι-άσκηση — Από τον τρέχοντα κλάδο feature/recherche, δημιουργήστε ένα pull request προς το main με το gh, δίνοντας έναν σαφή τίτλο.
gh pr create --base main --head feature/recherche \
--title "Ajout de la recherche" --body "Implémente la barre de recherche."Η αναθεώρηση κώδικα (code review) είναι η καρδιά του PR: ένας ή περισσότεροι συνάδελφοι διαβάζουν τις τροποποιήσεις, θέτουν ερωτήσεις, προτείνουν βελτιώσεις και καταλήγουν να εγκρίνουν ή να ζητήσουν αλλαγές.
Οι τρεις δυνατές αποφάσεις στο GitHub:
| Απόφαση | Σημασία |
|---|---|
| Approve | Ο κώδικας είναι καλός, μπορούμε να συγχωνεύσουμε |
| Request changes | Χρειάζονται διορθώσεις πριν από τη συγχώνευση |
| Comment | Παρατηρήσεις χωρίς να μπλοκάρουν ούτε να εγκρίνουν |
Από την πλευρά του συγγραφέα, μετά από σχόλια, διορθώνουμε και ξαναστέλνουμε: το PR ενημερώνεται αυτόματα.
# Διόρθωση μετά την αναθεώρηση
git switch feature/recherche
# ... τροποποιήσεις ...
git commit -am "Prise en compte des retours de revue"
git push # το PR ενημερώνεται μόνο τουΤι κοιτάζει ένας καλός reviewer:
Η αναθεώρηση κώδικα δεν είναι κρίση του προσώπου, αλλά συλλογική βελτίωση του προϊόντος. Κρίνουμε τον κώδικα, ποτέ τον συγγραφέα. Και υπογραμμίζουμε επίσης ό,τι είναι καλά φτιαγμένο.
Μόλις το PR εγκριθεί και η CI είναι πράσινη, το συγχωνεύουμε. Το GitHub προτείνει τρεις μεθόδους, που αλλάζουν τη μορφή του ιστορικού.
| Μέθοδος | Τι κάνει | Πότε να τη χρησιμοποιήσετε |
|---|---|---|
| Create a merge commit | Δημιουργεί commit συγχώνευσης, κρατά όλα τα commits του κλάδου | Ιχνηλάτηση ολόκληρου του κλάδου |
| Squash and merge | Συμπιέζει όλα τα commits σε ένα καθαρό | Καθαρό και συνοπτικό ιστορικό main |
| Rebase and merge | Ξαναπαίζει τα commits στο main, χωρίς commit συγχώνευσης | Αυστηρά γραμμικό ιστορικό |
# Συγχώνευση από το τερματικό με το GitHub CLI
gh pr merge 42 --squash --delete-branchΜετά τη συγχώνευση, καθαρίζουμε:
# Διαγραφή του απομακρυσμένου κλάδου (συχνά αυτόματη)
git push origin --delete feature/recherche
# Ενημέρωση του τοπικού
git switch main
git pull origin main
# Διαγραφή του τοπικού κλάδου
git branch -d feature/rechercheΤο squash and merge είναι πολύ δημοφιλές: μία λειτουργία = ένα καθαρό commit στο
main. Το ιστορικό γίνεται μια ευανάγνωστη λίστα λειτουργιών, και όχι ένας σωρός από «wip», «fix typo», «oups».
🔧 Μίνι-άσκηση — Με το gh, συγχωνεύστε το PR αριθμός 42 με squash και διαγράψτε τον κλάδο μαζί. Γράψτε την εντολή.
gh pr merge 42 --squash --delete-branch
Ένα αποτελεσματικό PR είναι μικρό, σαφές και δοκιμασμένο. Ακολουθούν οι συνήθειες των αποδοτικών ομάδων.
| Καλή πρακτική | Γιατί |
|---|---|
| Μικρά PR (< 400 γραμμές) | Πιο εύκολα και πιο γρήγορα στην αναθεώρηση |
| Ένα PR = ένα θέμα | Όχι ανάμειξη «feature + refactor + typo» |
| Σαφής τίτλος + περιγραφή | Ο reviewer καταλαβαίνει χωρίς να μαντεύει |
Σύνδεση του issue (Closes #N) | Ιχνηλατεί την ανάγκη και κλείνει το issue στη συγχώνευση |
| Πράσινη CI πριν ζητήσετε αναθεώρηση | Δεν ζητάμε αναθεώρηση σπασμένου κώδικα |
| Απάντηση σε όλα τα σχόλια | Τίποτα δεν μένει χωρίς απάντηση |
# Αυτόματη σύνδεση ενός issue στην περιγραφή
gh pr create --title "Ajout export CSV" \
--body "Permet d'exporter les données en CSV. Closes #57"Ένα PR 1 000 γραμμών λαμβάνει ένα «LGTM» (looks good to me) χωρίς πραγματική ανάγνωση — κανείς δεν έχει το θάρρος να τα διαβάσει όλα. Ένα PR 50 γραμμών λαμβάνει πολύτιμα σχόλια. Μικρό = σοβαρή αναθεώρηση.
🔧 Μίνι-άσκηση — Ποια λέξη-κλειδί προσθέτετε στην περιγραφή ενός PR για να κλείσει αυτόματα το issue #57 κατά τη συγχώνευση;
Closes #57 (οι παραλλαγές Fixes #57 ή Resolves #57 λειτουργούν επίσης).
Question 1 : Σε τι χρησιμεύει ένα pull request;
a) Να διαγράψετε έναν κλάδο
b) Να ζητήσετε αναθεώρηση και ενσωμάτωση ενός κλάδου σε έναν άλλο
c) Να εγκαταστήσετε το Git
d) Να κλωνοποιήσετε ένα αποθετήριο
✅ Απάντηση: b) — Ένα PR ζητά αναθεώρηση του κώδικα ενός κλάδου και έπειτα τη συγχώνευσή του (συχνά στο main).
Question 2 : Τι πρέπει να κάνετε πριν μπορέσετε να ανοίξετε ένα PR στο GitHub;
a) Να διαγράψετε το main
b) Να στείλετε τον κλάδο στο απομακρυσμένο αποθετήριο (git push)
c) Να κλείσετε το τερματικό
d) Να απενεργοποιήσετε την CI
✅ Απάντηση: b) — Ο κλάδος πρέπει να υπάρχει στην απομακρυσμένη πλευρά· τον στέλνουμε με git push -u origin nom-de-branche.
Question 3 : Τι σημαίνει «Request changes» σε μια αναθεώρηση;
a) Ο κώδικας εγκρίθηκε
b) Χρειάζονται διορθώσεις πριν από τη συγχώνευση
c) Το PR διαγράφηκε
d) Δημιουργείται νέο αποθετήριο
✅ Απάντηση: b) — Ο reviewer ζητά τροποποιήσεις· ο συγγραφέας διορθώνει και ξαναστέλνει, κάτι που ενημερώνει το PR.
Question 4 : Ποια μέθοδος συγχώνευσης συμπιέζει όλα τα commits του κλάδου σε ένα;
a) Create a merge commit
b) Squash and merge
c) Rebase and merge
d) Cherry-pick
✅ Απάντηση: b) — Το Squash and merge συμπυκνώνει όλα τα commits σε ένα καθαρό commit στο main.
Question 5 : Γιατί να προτιμάτε μικρά pull requests;
a) Καταναλώνουν λιγότερο δίσκο
b) Αναθεωρούνται πιο γρήγορα και πιο σοβαρά
c) Το GitHub τα καθιστά υποχρεωτικά
d) Αποφεύγουν τη συγγραφή δοκιμών
✅ Απάντηση: b) — Ένα μικρό PR αναθεωρείται προσεκτικά και γρήγορα· ένα τεράστιο PR λαμβάνει συχνά ένα «LGTM» χωρίς πραγματική ανάγνωση.
Ολοκληρώσατε μια λειτουργία στον κλάδο feature/footer. Εκτελέστε τον πλήρη κύκλο ενός pull request με το GitHub CLI (gh):
main με σαφή τίτλο και σύνδεσμο issue (Closes #12).# 1. Αποστολή του κλάδου
git switch feature/footer
git push -u origin feature/footer
# 2. Άνοιγμα του pull request
gh pr create --base main --head feature/footer \
--title "Ajout du pied de page du site" \
--body "Ajoute un footer responsive avec liens et mentions légales. Closes #12"
# 3. Μετά την έγκριση: συγχώνευση squash + διαγραφή του κλάδου
gh pr merge --squash --delete-branch
# 4. Ενημέρωση του τοπικού
git switch main
git pull origin main
git branch -d feature/footerΑναμενόμενο αποτέλεσμα:
| Βήμα | Επαλήθευση |
|---|---|
| PR δημιουργήθηκε | Το gh pr list δείχνει το ανοιχτό PR προς το main |
| Issue συνδεδεμένο | Η περιγραφή περιέχει Closes #12 (θα κλείσει το issue στη συγχώνευση) |
| Συγχώνευση squash | Ένα μόνο commit «Ajout du pied de page du site» εμφανίζεται στο main |
| Κλάδος διαγράφηκε | Το git branch δεν εμφανίζει πλέον το feature/footer |
$ git log --oneline -1
a1b2c3d Ajout du pied de page du site (#13)Ο αριθμός σε παρένθεση (
#13) προστίθεται αυτόματα από το GitHub: είναι ο αριθμός του PR. Κάνοντας κλικ επιστρέφετε σε όλη τη συζήτηση αναθεώρησης. Πλήρης ιχνηλασιμότητα.
gh pr create.Κατέχετε τον κύκλο συνεισφοράς στο δικό σας αποθετήριο. Το μάθημα 04 — Συνεργατική ροή εργασίας ανοίγει την ευρύτερη συνεργασία: fork, clone, issues και καλές πρακτικές ομάδας.
Με την επιφύλαξη παντός δικαιώματος. Οποιαδήποτε αναπαραγωγή, διάδοση, χρήση ή προσαρμογή αυτού του μαθήματος, εν όλω ή εν μέρει, απαγορεύεται αυστηρά χωρίς την προηγούμενη γραπτή άδεια του Dr. Haythem REHOUMA.
Μάθημα δημιουργημένο από τον Dr. Haythem REHOUMA — Ανάπτυξη και ανάπτυξη λύσεων δεδομένων