Pull requests

8 λεπτά

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


1 — Τι είναι ένα pull request;

Ένα pull request (PR), που ονομάζεται επίσης merge request στο GitLab, είναι μια αίτηση ενσωμάτωσης: «εδώ είναι η δουλειά μου σε έναν κλάδο, παρακαλώ αναθεωρήστε την και έπειτα συγχωνεύστε την στο main». Είναι το σημείο συνάντησης μεταξύ του κώδικα και της ομάδας.

Ένα PR δεν είναι μόνο ένα κουμπί «συγχώνευση». Είναι ένας χώρος συζήτησης γύρω από τον κώδικα: σχόλια, προτάσεις, αυτόματες δοκιμές, επικύρωση. Εκεί κρίνεται η ποιότητα.

Ένα PR χρησιμεύει για…Συγκεκριμένα
Αναθεώρηση του κώδικαΈνας συνάδελφος εντοπίζει σφάλματα και βελτιώσεις
Ενεργοποίηση της CIΑυτόματες δοκιμές + build στον κλάδο
Τεκμηρίωση της αλλαγήςΤίτλος + περιγραφή εξηγούν το «γιατί»
Ιχνηλάτηση της απόφασηςΠοιος ενέκρινε, πότε, γιατί

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


2 — Δημιουργία ενός pull request

Πριν ανοίξετε ένα PR, πρέπει να έχετε στείλει τον κλάδο σας στο GitHub.

Βήμα 1 — Αποστολή του κλάδου:

bash
git switch feature/recherche
git push -u origin feature/recherche

Βήμα 2 — Άνοιγμα του PR (δύο επιλογές):

  • Στη διεπαφή GitHub: εμφανίζεται ένα banner «Compare & pull request»· κάνετε κλικ, επιλέγετε τον κλάδο βάσης (main) και τον κλάδο σύγκρισης (feature/recherche).
  • Από τη γραμμή εντολών με το GitHub CLI:
bash
# Δημιουργία του 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, δίνοντας έναν σαφή τίτλο.

✅ Δείτε μια λύση
bash
gh pr create --base main --head feature/recherche \
  --title "Ajout de la recherche" --body "Implémente la barre de recherche."

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


3 — Η αναθεώρηση κώδικα

Η αναθεώρηση κώδικα (code review) είναι η καρδιά του PR: ένας ή περισσότεροι συνάδελφοι διαβάζουν τις τροποποιήσεις, θέτουν ερωτήσεις, προτείνουν βελτιώσεις και καταλήγουν να εγκρίνουν ή να ζητήσουν αλλαγές.

Οι τρεις δυνατές αποφάσεις στο GitHub:

ΑπόφασηΣημασία
ApproveΟ κώδικας είναι καλός, μπορούμε να συγχωνεύσουμε
Request changesΧρειάζονται διορθώσεις πριν από τη συγχώνευση
CommentΠαρατηρήσεις χωρίς να μπλοκάρουν ούτε να εγκρίνουν

Από την πλευρά του συγγραφέα, μετά από σχόλια, διορθώνουμε και ξαναστέλνουμε: το PR ενημερώνεται αυτόματα.

bash
# Διόρθωση μετά την αναθεώρηση
git switch feature/recherche
# ... τροποποιήσεις ...
git commit -am "Prise en compte des retours de revue"
git push          # το PR ενημερώνεται μόνο του

Τι κοιτάζει ένας καλός reviewer:

  • Ο κώδικας κάνει αυτό που ισχυρίζεται; (σωστή λογική)
  • Είναι ευανάγνωστος και συντηρήσιμος;
  • Υπάρχουν δοκιμές; Η CI περνάει στο πράσινο;
  • Προβλήματα ασφάλειας ή απόδοσης;

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

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


4 — Συγχώνευση ενός pull request

Μόλις το PR εγκριθεί και η CI είναι πράσινη, το συγχωνεύουμε. Το GitHub προτείνει τρεις μεθόδους, που αλλάζουν τη μορφή του ιστορικού.

ΜέθοδοςΤι κάνειΠότε να τη χρησιμοποιήσετε
Create a merge commitΔημιουργεί commit συγχώνευσης, κρατά όλα τα commits του κλάδουΙχνηλάτηση ολόκληρου του κλάδου
Squash and mergeΣυμπιέζει όλα τα commits σε ένα καθαρόΚαθαρό και συνοπτικό ιστορικό main
Rebase and mergeΞαναπαίζει τα commits στο main, χωρίς commit συγχώνευσηςΑυστηρά γραμμικό ιστορικό
bash
# Συγχώνευση από το τερματικό με το GitHub CLI
gh pr merge 42 --squash --delete-branch

Μετά τη συγχώνευση, καθαρίζουμε:

bash
# Διαγραφή του απομακρυσμένου κλάδου (συχνά αυτόματη)
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

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


5 — Καλές πρακτικές PR

Ένα αποτελεσματικό PR είναι μικρό, σαφές και δοκιμασμένο. Ακολουθούν οι συνήθειες των αποδοτικών ομάδων.

Καλή πρακτικήΓιατί
Μικρά PR (< 400 γραμμές)Πιο εύκολα και πιο γρήγορα στην αναθεώρηση
Ένα PR = ένα θέμαΌχι ανάμειξη «feature + refactor + typo»
Σαφής τίτλος + περιγραφήΟ reviewer καταλαβαίνει χωρίς να μαντεύει
Σύνδεση του issue (Closes #N)Ιχνηλατεί την ανάγκη και κλείνει το issue στη συγχώνευση
Πράσινη CI πριν ζητήσετε αναθεώρησηΔεν ζητάμε αναθεώρηση σπασμένου κώδικα
Απάντηση σε όλα τα σχόλιαΤίποτα δεν μένει χωρίς απάντηση
bash
# Αυτόματη σύνδεση ενός 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 λειτουργούν επίσης).

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


6 — Κουίζ — Τα pull requests

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» χωρίς πραγματική ανάγνωση.

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


7 — Πρακτική — Άνοιγμα και συγχώνευση ενός PR

Οδηγία

Ολοκληρώσατε μια λειτουργία στον κλάδο feature/footer. Εκτελέστε τον πλήρη κύκλο ενός pull request με το GitHub CLI (gh):

  1. Στείλτε τον κλάδο.
  2. Ανοίξτε ένα PR προς το main με σαφή τίτλο και σύνδεσμο issue (Closes #12).
  3. Μόλις εγκριθεί, συγχωνεύστε το με squash και διαγράψτε τον κλάδο.
  4. Ενημερώστε το τοπικό σας αποθετήριο.

Διόρθωση

bash
# 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
text
$ git log --oneline -1
a1b2c3d Ajout du pied de page du site (#13)

Ο αριθμός σε παρένθεση (#13) προστίθεται αυτόματα από το GitHub: είναι ο αριθμός του PR. Κάνοντας κλικ επιστρέφετε σε όλη τη συζήτηση αναθεώρησης. Πλήρης ιχνηλασιμότητα.

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


8 — Σύνοψη

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

  1. Ένα pull request ζητά αναθεώρηση και έπειτα συγχώνευση ενός κλάδου: είναι χώρος συζήτησης.
  2. Δημιουργία PR: αποστολή του κλάδου, έπειτα άνοιγμα μέσω της διεπαφής ή gh pr create.
  3. Η αναθεώρηση κώδικα καταλήγει σε Approve, Request changes ή Comment· κρίνουμε τον κώδικα, όχι τον συγγραφέα.
  4. Τρεις μέθοδοι συγχώνευσης: merge commit, squash and merge, rebase and merge.
  5. Καλές πρακτικές: μικρά PR, ένα μόνο θέμα, πράσινη CI, συνδεδεμένο issue.
  6. Μετά τη συγχώνευση: διαγραφή του κλάδου και ενημέρωση του τοπικού.

Η συνέχεια

Κατέχετε τον κύκλο συνεισφοράς στο δικό σας αποθετήριο. Το μάθημα 04 — Συνεργατική ροή εργασίας ανοίγει την ευρύτερη συνεργασία: fork, clone, issues και καλές πρακτικές ομάδας.

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


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

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