Αναπτύσσετε σε έναν κλάδο. Το main έχει προχωρήσει. Πώς ενσωματώνετε;
A---B---C main
/
D---E feature-branch2 επιλογές:
Ποιο να επιλέξετε; Εξαρτάται από τον στόχο σας!
git checkout main
git merge feature-branch A---B---C-------M main
/ /
D---E-----------/ (M = merge commit)git checkout feature-branch
git rebase main A---B---C---D'---E' main| Κριτήριο | MERGE | REBASE |
|---|---|---|
| Ιστορικό | Διατηρεί παράλληλους κλάδους | Γραμμικοποιεί τα πάντα |
| Commits | Προσθέτει commit συγχώνευσης | Ξαναγράφει τα commits |
| Πολυπλοκότητα | Απλή (1 εντολή) | Πιο σύνθετη |
| Συγκρούσεις | 1 επίλυση το πολύ | Πιθανές πολλές επιλύσεις |
| Ασφάλεια | Πολύ ασφαλές | Επικίνδυνο αν χρησιμοποιηθεί λάθος |
| Ιχνηλασιμότητα | Βλέπει πότε δημιουργήθηκαν/συγχωνεύθηκαν οι κλάδοι | Χάνει τη χρονική πληροφορία |
| Συνεργασία | Ιδανικό για ομάδα | Προσοχή στα κοινόχρηστα commits |
| Αναγνωσιμότητα | Σύνθετη με πολλούς κλάδους | Πολύ καθαρή, γραμμική |
Καταστάσεις:
Εντολές:
git checkout main
git pull origin main
git merge feature-branch
git push origin mainΚαταστάσεις:
Εντολές:
git checkout feature-branch
git rebase main # Επίλυση συγκρούσεων αν χρειάζεται
git checkout main
git merge feature-branch # Fast-forward merge
git push origin main
```
### **ΧΡΥΣΟΣ ΚΑΝΟΝΑΣ:**
**NEVER REBASE SHARED COMMITS !**
```bash
# ΚΙΝΔΥΝΟΣ - ΠΟΤΕ μην κάνετε αυτό:
git push origin feature-branch # Κοινόχρηστα commits
git rebase main # Ξαναγράφει κοινόχρηστα commits = ΧΑΟΣ ομάδας
# OK - Rebase μόνο τοπικά:
git rebase main # Commits ακόμα τοπικά = OK
git push origin feature-branch # Push μετά το rebase = OK| Επίπεδο | Συνιστώμενη στρατηγική |
|---|---|
| Αρχάριος | Πάντα MERGE |
| Μεσαίος | MERGE για συνεργασία, REBASE για τοπικό καθαρισμό |
| Ειδικός | Η ομάδα αποφασίζει μια συνεπή στρατηγική |
Το σημαντικό = συνέπεια στην ομάδα, όχι τεχνική τελειότητα!