Merge Request (MR) — αίτημα συγχώνευσης αλλαγών από έναν κλάδο Git σε άλλον, κεντρικό στοιχείο της αναθεώρησης κώδικα στο GitLab και το GitHub. Σύμφωνα με το GitLab Docs, 2024, το Merge Request (MR) διαφέρει από το Pull Request (PR) στο GitHub μόνο στην ορολογία: στο GitLab είναι MR, στο GitHub — PR, αλλά η ουσία και η διαδικασία είναι ίδιες. Κάθε MR περιλαμβάνει περιγραφή των αλλαγών, λίστα commits, diff αρχεία και συζήτηση με την ομάδα.
Κύρια σημεία
Merge Request (MR) — αίτημα ενσωμάτωσης αλλαγών από έναν κλάδο Git σε άλλον, που εκκινεί τη διαδικασία αναθεώρησης κώδικα και αυτόματου ελέγχου. Σε αντίθεση με την άμεση συγχώνευση μέσω κονσόλας, το MR δημιουργεί μια επίσημη διαδικασία: ο προγραμματιστής περιγράφει τις αλλαγές, ορίζει αναθεωρητές, εκκινεί το CI/CD και λαμβάνει ανατροφοδότηση πριν από την εφαρμογή των αλλαγών. Αποτελεί βασικό στοιχείο του GitLab, αλλά ο ανάλογος μηχανισμός στο GitHub ονομάζεται Pull Request (PR).
Σύμφωνα με το GitLab Documentation, 2026, στο GitLab δημιουργούνται πάνω από 80 εκατομμύρια Merge Request ετησίως. Κάθε MR περιέχει τέσσερα βασικά στοιχεία: περιγραφή (description) με πλαίσιο αλλαγών, λίστα commits (commits), διαφορά κώδικα (diff) και συζήτηση (discussion thread). Χωρίς ένα από αυτά τα στοιχεία, το MR θεωρείται ελλιπές.
Merge Request (MR) επιλύει τρία καθήκοντα: αποτρέπει άμεσες αλλαγές σε προστατευμένους κλάδους (main, develop), εξασφαλίζει έλεγχο ποιότητας μέσω αναθεώρησης και διατηρεί το ιστορικό συζητήσεων για μελλοντικούς προγραμματιστές. Στο GitLab, η κατάσταση MR εμφανίζεται στη διεπαφή με χρωματικές ενδείξεις: γκρι για Draft, πορτοκαλί για αναμονή, πράσινο για Approved, μωβ για Merged και κόκκινο για Closed.
Σε διάφορες πλατφόρμες Git, το Merge Request ονομάζεται διαφορετικά. Το GitLab χρησιμοποιεί “Merge Request” (MR), το GitHub — “Pull Request” (PR). Αναλογία — Change Request (CR) στο Gerrit. Και τα τρία αναφέρονται στην ίδια διαδικασία: αίτημα ενσωμάτωσης αλλαγών μέσω αναθεώρησης κώδικα. Η επιλογή του όρου εξαρτάται μόνο από την πλατφόρμα που χρησιμοποιείται στο έργο.
# Δημιουργία κλάδου με αλλαγές
git checkout -b feature/add-auth
git commit -m "Add OAuth2 authentication flow"
git push origin feature/add-auth
# Το MR μπορεί να δημιουργηθεί μέσω UI GitLab/GitHub ή CLI:
gh pr create --title "Add OAuth2 authentication flow" \
--body "Implements OAuth2 with Google and Apple providers" \
--reviewer "team-lead"
Merge Request στο GitLab και Pull Request στο GitHub — είναι λειτουργικά πανομοιότυποι μηχανισμοί με διαφορετικές ονομασίες. Η διαφορά οφείλεται στην ιστορία: το GitLab αρχικά τοποθετήθηκε ως εναλλακτική λύση Self-Hosted για το GitHub και επέλεξε τον όρο “Merge Request” για τη διαδικασία συγχώνευσης. Το GitHub, που ξεκίνησε νωρίτερα, χρησιμοποίησε το “Pull Request” — αίτημα “τραβήγματος” (pull) των αλλαγών στον κύριο κλάδο.
Σύμφωνα με το GitHub Docs, 2024, και τα δύο εργαλεία υποστηρίζουν το ίδιο σύνολο λειτουργιών: περιγραφή με Markdown, ορισμό αναθεωρητών, σχολιασμό συγκεκριμένων γραμμών κώδικα, καταστάσεις ελέγχου και αυτόματη συγχώνευση όταν πληρούνται οι προϋποθέσεις. Οι διαφορές αφορούν τη διεπαφή και πρόσθετες δυνατότητες.
| Παράμετρος | GitLab (Merge Request) | GitHub (Pull Request) |
|---|---|---|
| Όρος | Merge Request (MR) | Pull Request (PR) |
| Πρόχειρο | Draft MR | Draft PR |
| Code Owners | Code Owners + Approvals | CODEOWNERS + Review |
| Μέθοδοι συγχώνευσης | Merge Commit, Squash, Fast-Forward | Merge Commit, Squash, Rebase |
| Ενσωμάτωση CI | GitLab CI/CD ενσωματωμένο | GitHub Actions |
Η δημιουργία Merge Request (MR) ξεκινά με τη δημοσίευση του κλάδου με αλλαγές στο απομακρυσμένο αποθετήριο. Μετά το push στο GitLab ή το GitHub, εμφανίζεται το κουμπί “Create Merge Request” ή “Compare & Pull Request” στη διεπαφή. Ο προγραμματιστής συμπληρώνει την περιγραφή, υποδεικνύει τον κλάδο-στόχο (συνήθως develop ή main), ορίζει αναθεωρητές και προσθέτει ετικέτες (labels).
Σύμφωνα με το GitLab Documentation, 2025, ένα τυπικό MR περιέχει τίτλο έως 72 χαρακτήρες, περιγραφή με πρότυπο (template) και σύνδεσμο προς την εργασία (issue). Η περιγραφή πρέπει να απαντά στις ερωτήσεις: τι έγινε, γιατί, πώς δοκιμάστηκε. Το GitLab υποστηρίζει αυτόματο κλείσιμο issue κατά τη συγχώνευση μέσω των λέξεων-κλειδιών Closes, Fixes, Resolves.
# Παράδειγμα προτύπου .gitlab/merge_request_templates/default.md
## What does this MR do?
[Σύντομη περιγραφή αλλαγών: τι και γιατί]
## How to test
1. Εκτέλεση ./gradlew test
2. Έλεγχος LoginActivity με δοκιμαστικό token
3. Βεβαιωθείτε ότι δεν υπάρχει οπισθοδρόμηση στο AuthManager
## Related issues
Closes #142
Merge Request (MR) περνά από πέντε καταστάσεις στο GitLab. Η πρώτη — Draft (πρόχειρο), σημειώνεται με το πρόθεμα “Draft:” στον τίτλο και μπλοκάρει τη συγχώνευση. Μετά την προετοιμασία, ο προγραμματιστής αφαιρεί το Draft και το MR μεταβαίνει στην κατάσταση Opened — ξεκινά η αναθεώρηση κώδικα και εκκινείται το pipeline CI/CD.
Σύμφωνα με το GitLab Docs, 2024, στην κατάσταση Opened, οι αναθεωρητές εξετάζουν το diff, αφήνουν σχόλια και ζητούν αλλαγές μέσω Resolve Threads. Όταν όλα τα νήματα είναι κλειστά και το CI/CD ολοκληρωθεί με επιτυχία, ο υπεύθυνος προγραμματιστής ορίζει Approve. Στη συνέχεια, το MR μπορεί να συγχωνευθεί με το κουμπί Merge ή να περιμένει αυτόματη συγχώνευση (Auto-merge).
GitLab υποστηρίζει τρεις παραλλαγές τελικής κατάστασης: Merged (επιτυχώς συγχωνευμένο), Closed (κλειστό χωρίς συγχώνευση, π.χ. κατά την απόρριψη λειτουργίας) και Reopened (εκ νέου άνοιγμα μετά το κλείσιμο). Κάθε κατάσταση καταγράφεται στο Activity Timeline MR για έλεγχο.
Το GitLab ενημερώνει αυτόματα την κατάσταση Merge Request κατά την εμφάνιση γεγονότων: κατά την push νέων commits, τα Approvals επαναφέρονται, σε επιτυχημένο CI pipeline η κατάσταση γίνεται Pipeline passed, σε σφάλμα — Pipeline failed (η συγχώνευση μπλοκάρεται). Μπορεί να ρυθμιστεί Auto-merge: το MR συγχωνεύεται αυτόματα μετά από επιτυχημένο CI και λήψη όλων των απαιτούμενων εγκρίσεων.
Αναθεώρηση κώδικα στο Merge Request (MR) — υποχρεωτικό στάδιο στα περισσότερα εμπορικά έργα. Σύμφωνα με τα δεδομένα έρευνας της SmartBear, 2023, η αναθεώρηση κώδικα με MR μειώνει τον αριθμό ελαττωμάτων κατά 30–60% και επιταχύνει την ενσωμάτωση νέων προγραμματιστών. Βασικός κανόνας — κάθε MR ελέγχεται από τουλάχιστον έναν, κατά προτίμηση δύο προγραμματιστές που δεν συμμετείχαν στη συγγραφή του κώδικα.
Ο έλεγχος MR περιλαμβάνει πέντε κριτήρια: ορθότητα λογικής, συμμόρφωση με το στυλ κώδικα, κάλυψη δοκιμών, ασφάλεια και απόδοση. Στο GitLab μπορούν να ρυθμιστούν Required Approvals — υποχρεωτικός αριθμός εγκρίσεων πριν από τη συγχώνευση, π.χ. 2 εγκρίσεις για main και 1 για develop.
Συζήτηση στο MR γίνεται σε Threads — σχόλια σε συγκεκριμένες γραμμές κώδικα. Κάθε νήμα πρέπει να είναι resolved (κλειστό) πριν από τη συγχώνευση. Για επιτάχυνση της αναθεώρησης, συνιστάται ο περιορισμός του μεγέθους MR: 200–400 γραμμές αλλαγών. Σύμφωνα με το Google Research (2022), τα MR με όγκο άνω των 400 γραμμών ελέγχονται 30% λιγότερο αποτελεσματικά.
Κατά τη δημιουργία Merge Request (MR), το pipeline CI/CD εκκινείται αυτόματα. Στο GitLab, αυτό γίνεται μέσω του αρχείου .gitlab-ci.yml, στο GitHub — μέσω GitHub Actions workflow. Το pipeline περιλαμβάνει την κατασκευή του έργου (build), την εκτέλεση μοναδιαίων δοκιμών (unit tests), linters (lint), στατική ανάλυση (SAST) και έλεγχο κάλυψης κώδικα.
Σύμφωνα με το GitLab Blog, 2024, η κατάσταση pipeline εμφανίζεται απευθείας στο MR: πράσινο τικ (passed), κόκκινος σταυρός (failed) ή κίτρινος κύκλος (running). Εάν το pipeline αποτύχει, το GitLab μπλοκάρει το κουμπί Merge μέχρι τη διόρθωση. Στις ρυθμίσεις μπορεί να ενεργοποιηθεί το “Merge when pipeline succeeds” — αυτόματη συγχώνευση μετά από επιτυχημένο pipeline.
# .gitlab-ci.yml — παράδειγμα για έργο Android
test:
stage: test
script:
- ./gradlew ktlintCheck
- ./gradlew testDebugUnitTest
only:
- merge_requests
build:
stage: build
script:
- ./gradlew assembleDebug
only:
- merge_requests
GitLab και GitHub προσφέρουν τρεις μεθόδους συγχώνευσης για Merge Request. Η επιλογή εξαρτάται από την πολιτική της ομάδας και την επιθυμητή καθαρότητα ιστορικού. Merge Commit — δημιουργεί ξεχωριστό commit συγχώνευσης, διατηρώντας ολόκληρο το ιστορικό του κλάδου λειτουργίας. Squash — συνδυάζει όλα τα commits του κλάδου σε ένα commit στον κλάδο-στόχο. Fast-Forward — εφαρμόζει τα commits γραμμικά χωρίς commit συγχώνευσης.
Σύμφωνα με το GitLab Docs, 2025, το Squash προτιμάται σε έργα με υψηλή πυκνότητα commits (20+ commits σε έναν κλάδο λειτουργίας). Το Fast-Forward είναι υποχρεωτικό για Trunk-Based Development. Το Merge Commit χρησιμοποιείται στο Git Flow για τη διατήρηση της σημασιολογίας διακλάδωσης.
Ένα ποιοτικό Merge Request (MR) συντομεύει τον χρόνο αναθεώρησης και μειώνει τον αριθμό σφαλμάτων. Πρώτος κανόνας — ένα MR λύνει μία εργασία. Εάν οι αλλαγές επηρεάζουν πολλές άσχετες λειτουργίες, πρέπει να χωριστούν σε ξεχωριστά MR. Δεύτερος — ο τίτλος MR πρέπει να είναι κατατοπιστικός: “Add OAuth2 authentication with Google provider” αντί για “Fix stuff” ή “Update code”.
Σύμφωνα με το Google Engineering Practices, 2024, ένα καλό MR περιέχει περιγραφή πλαισίου: γιατί είναι απαραίτητες οι αλλαγές, πώς δοκιμάστηκαν, ποιοι είναι οι κίνδυνοι. Το μέγεθος MR δεν πρέπει να υπερβαίνει τις 400 γραμμές αλλαγών. Εάν ο όγκος είναι μεγαλύτερος — η εργασία πρέπει να αποσυντεθεί σε υποεργασίες. Για τεκμηρίωση και δοκιμές, επιτρέπονται εξαιρέσεις, αλλά με επεξήγηση.
Merge Request (MR) πρέπει να περιλαμβάνει αυτόματες δοκιμές για τη νέα λειτουργικότητα. Στο GitLab μπορεί να ρυθμιστεί η πολιτική Coverage Check — το MR μπλοκάρεται αυτόματα εάν η κάλυψη κώδικα έχει πέσει κάτω από το όριο (π.χ., 80%). Αυτό εγγυάται ότι η νέα λειτουργικότητα δεν μειώνει τη συνολική ποιότητα του έργου.
Το GitLab υποστηρίζει πρότυπα Merge Request μέσω αρχείων .gitlab/merge_request_templates/. Το πρότυπο περιλαμβάνει ενότητες: τι έγινε, πώς να δοκιμάσετε, σχετικές εργασίες και λίστα ελέγχου. Η χρήση προτύπων επιταχύνει τη δημιουργία MR και εγγυάται ότι οι προγραμματιστές δεν θα ξεχάσουν να αναφέρουν σημαντικές πληροφορίες. Στην περιγραφή MR αναφέρεται υποχρεωτικά το σχετικό issue (Closes #N) για αυτόματο κλείσιμο εργασιών κατά τη συγχώνευση.
Συχνές ερωτήσεις
Merge Request (MR) — είναι το αίτημα ενός προγραμματιστή να συγχωνεύσει τις αλλαγές του στον κύριο κλάδο του έργου. Τα άλλα μέλη της ομάδας ελέγχουν τον κώδικα, αφήνουν σχόλια και μόνο μετά την έγκριση οι αλλαγές εισέρχονται στο έργο. Είναι ανάλογο του Pull Request στο GitHub.
Merge Request — όρος GitLab, Pull Request — όρος GitHub. Λειτουργικά, οι μηχανισμοί είναι πανομοιότυποι: αίτημα συγχώνευσης, αναθεώρηση κώδικα, σχόλια σε γραμμές κώδικα, έλεγχοι CI/CD. Η διαφορά είναι μόνο στο όνομα του κουμπιού και σε ορισμένα στοιχεία διεπαφής.
Μετά το push των αλλαγών στο απομακρυσμένο αποθετήριο, ανοίξτε την καρτέλα Merge Requests → Create Merge Request. Επιλέξτε τον κλάδο προέλευσης (source), τον κλάδο-στόχο (target), συμπληρώστε την περιγραφή (μπορείτε να χρησιμοποιήσετε πρότυπο), ορίστε έναν αναθεωρητή και κάντε κλικ στο Create. Το GitLab θα εμφανίσει αυτόματα το diff των αλλαγών.
Βέλτιστα 1–2 αναθεωρητές ανά MR. Σύμφωνα με το Google Research, ο μεγαλύτερος αριθμός αναθεωρητών δεν αυξάνει την ποιότητα ελέγχου, αλλά παρατείνει τον χρόνο αναμονής. Για τον κλάδο main, συχνά ρυθμίζονται υποχρεωτικές 2 εγκρίσεις, για τον develop — 1.
Ιδανικό μέγεθος MR — 200–400 γραμμές αλλαγών συμπεριλαμβανομένων ή 1–3 commits. Σύμφωνα με τα δεδομένα SmartBear και Google, τα MR μεγαλύτερα από 400 γραμμές ελέγχονται 30% λιγότερο αποτελεσματικά. Χωρίστε μεγάλες αλλαγές σε πολλά διαδοχικά MR.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης