Το να κάνετε push σημαίνει να στέλνετε τοπικά commits σε ένα απομακρυσμένο αποθετήριο Git, καθιστώντας τα διαθέσιμα για τα άλλα μέλη της ομάδας. Μετά το push, οι αλλαγές εμφανίζονται στο GitHub, GitLab ή Bitbucket. Σύμφωνα με το GitHub Octoverse 2024, καθημερινά γίνονται push πάνω από 10 εκατομμύρια commits στην πλατφόρμα. Git push είναι η βασική ενέργεια για τον συγχρονισμό της εργασίας σε μια κατανεμημένη ομάδα.
Κύρια σημεία
Το Git push είναι μια εντολή που μεταφέρει commits από το τοπικό αποθετήριο στο απομακρυσμένο. Σε αντίθεση με το commit, που αποθηκεύει αλλαγές μόνο στον τοπικό υπολογιστή του προγραμματιστή, το push δημοσιεύει αυτές τις αλλαγές για ολόκληρη την ομάδα. Push είναι υποχρεωτικό βήμα πριν από τη δημιουργία Pull Request και την ανάπτυξη.
Η αρχιτεκτονική του Git προϋποθέτει ότι κάθε προγραμματιστής εργάζεται στο δικό του τοπικό αποθετήριο. Τα commits δημιουργούνται τοπικά και συσσωρεύονται μέχρι ο προγραμματιστής να αποφασίσει να τα κάνει push. Αυτό δίνει ελευθερία: μπορείτε να κάνετε πολλά τοπικά commits, να πειραματίζεστε και να ξαναγράφετε την ιστορία χωρίς να επηρεάζετε τους συναδέλφους.
# Push στο origin remote, main κλάδο
git push origin main
# Push τρέχοντος κλάδου στο remote με upstream
git push -u origin feature/new-dashboard
# Push όλων των κλάδων με αντίστοιχα ονόματα
git push --all origin
# Force push με lease (ασφαλές force push)
git push --force-with-lease
Μετά το push, το απομακρυσμένο αποθετήριο ενημερώνει τα refs (αναφορές σε κλάδους) ώστε να δείχνουν στα νέα commits. Άλλοι προγραμματιστές μπορούν να λάβουν αυτές τις αλλαγές μέσω git pull ή git fetch. Αυτή ακριβώς η ανταλλαγή commits αποτελεί τη βάση της συνεργατικής ανάπτυξης.
Η εντολή git push συγκρίνει τους τοπικούς και απομακρυσμένους κλάδους και μεταφέρει μόνο τα ελλείποντα commits. Το Git δεν στέλνει όλα τα αρχεία από την αρχή — μεταφέρει μόνο το delta, καθιστώντας το push γρήγορο ακόμα και σε μεγάλα αποθετήρια. Πρωτόκολλο Git χρησιμοποιεί smart transfer, που ελαχιστοποιεί τον όγκο των μεταφερόμενων δεδομένων.
Εάν ο απομακρυσμένος κλάδος περιέχει commits που δεν υπάρχουν τοπικά, το push θα απορριφθεί. Αυτός είναι ένας προστατευτικός μηχανισμός που αποτρέπει την απώλεια αλλαγών. Σε αυτήν την περίπτωση, ο προγραμματιστής πρέπει πρώτα να εκτελέσει git pull, να συγχωνεύσει τις αλλαγές και μόνο τότε να κάνει ξανά push. Εναλλακτική είναι το force push, που αντικαθιστά τον απομακρυσμένο κλάδο, αλλά πρέπει να χρησιμοποιείται με προσοχή.
| Εντολή | Ενέργεια | Πότε να χρησιμοποιείται |
|---|---|---|
| git push | τυπικό push σε tracked κλάδο | κανονική αποστολή αλλαγών |
| git push -u | push με ρύθμιση upstream | πρώτο push νέου κλάδου |
| git push --force-with-lease | ασφαλές force push | μετά από rebase του δικού σας κλάδου |
| git push --force | αναγκαστικό push | μόνο αν είστε σίγουροι ότι δεν υπάρχουν συγκρούσεις |
| git push --delete | διαγραφή απομακρυσμένου κλάδου | καθαρισμός μετά από συγχώνευση κλάδου |
Η κατανόηση των απομακρυσμένων αποθετηρίων είναι το κλειδί για σωστό push. Συνήθως χρησιμοποιείται το origin — το προεπιλεγμένο όνομα του απομακρυσμένου αποθετηρίου. Η εντολή git remote -v εμφανίζει τη λίστα των απομακρυσμένων αποθετηρίων και των URL τους. Μπορούν να προστεθούν πολλά remote (π.χ. origin για το κύριο αποθετήριο και upstream για το fork).
Βασικός κανόνας: πρέπει να κάνετε push μετά από κάθε λογικά ολοκληρωμένο στάδιο εργασίας. Εάν ένας προγραμματιστής έχει ολοκληρώσει μια εργασία ή μέρος αυτής — είναι ώρα για push. Ωστόσο, το push ημιτελούς εργασίας που σπάει το build δεν συνιστάται. Λειτουργικό build είναι η ελάχιστη απαίτηση για push σε οποιονδήποτε κλάδο.
Στην ομαδική ανάπτυξη, υιοθετείται ο ακόλουθος ρυθμός: το πρωί — git pull για να λάβετε αλλαγές συναδέλφων, κατά τη διάρκεια της ημέρας — μερικά commits και ένα ή δύο pushes, το βράδυ — τελικό push όλων των ολοκληρωμένων εργασιών. Όσο πιο συχνά κάνει push ένας προγραμματιστής, τόσο μικρότερος είναι ο κίνδυνος συγκρούσεων κατά τη συγχώνευση κλάδων και τόσο πιο διαφανής είναι η πρόοδος της εργασίας.
Το ασφαλές push είναι ένα σύνολο κανόνων που αποτρέπουν την απώλεια δεδομένων και τις συγκρούσεις στην ομάδα. Ο πρώτος και πιο σημαντικός κανόνας: μην κάνετε ποτέ push απευθείας στον main ή master κλάδο, εκτός αν έχει ρυθμιστεί άμεση ανάπτυξη στο έργο. Στις σύγχρονες ομάδες, η προστασία του main κλάδου ρυθμίζεται σε επίπεδο GitHub branch protection.
Δεύτερος κανόνας: πριν από το push, συγχρονιστείτε με τον απομακρυσμένο κλάδο. Εκτελέστε git pull --rebase για να αποφύγετε το merge commit κατά τη συγχώνευση. Αυτό απλοποιεί την ιστορία και την καθιστά γραμμική. Εάν το push απορριφθεί — μην χρησιμοποιήσετε γυμνό force push, αλλά πρώτα ελέγξτε ποια commits εμφανίστηκαν στον απομακρυσμένο κλάδο.
Τρίτος κανόνας: ρυθμίστε pre-push hooks που εκτελούν αυτόματα τα τεστ και τον linter πριν από την αποστολή. Εάν τα τεστ αποτύχουν — το push μπλοκάρεται. Τέτοια hooks ρυθμίζονται μέσω Husky ή Git hooks (αρχείο pre-push στο .git/hooks).
Τέταρτος κανόνας: μην κάνετε push μεγάλα δυαδικά αρχεία. Το Git δεν είναι σχεδιασμένο για αποθήκευση δυαδικών τεχνουργημάτων — διογκώνουν το αποθετήριο και επιβραδύνουν τις λειτουργίες. Για μεγάλα αρχεία χρησιμοποιείται το Git LFS (Large File Storage). Εάν ένα δυαδικό αρχείο έχει ήδη γίνει push και έχει εισέλθει στην ιστορία, πρέπει να αφαιρεθεί μέσω git filter-branch.
Η πιο συχνή αιτία αποτυχημένου push — ο απομακρυσμένος κλάδος περιέχει commits που δεν υπάρχουν τοπικά. Αυτό συμβαίνει όταν ένας άλλος προγραμματιστής έχει κάνει push τις αλλαγές του στον ίδιο κλάδο. Λύση: εκτελέστε git pull, επιλύστε πιθανές συγκρούσεις και επαναλάβετε το push.
# Push απορρίφθηκε — πρώτα fetch και rebase
git fetch origin
git rebase origin/main
# Επίλυση συγκρούσεων, στη συνέχεια:
git push --force-with-lease
# Ή απλά συγχώνευση απομακρυσμένων αλλαγών
git pull origin main
git push
Δεύτερη αιτία — έλλειψη δικαιωμάτων εγγραφής στον κλάδο. Εάν ο main κλάδος προστατεύεται από κανόνα branch protection, τα απευθείας pushes απαγορεύονται. Λύση: κάντε push σε feature κλάδο και δημιουργήστε Pull Request. Οι ρυθμίσεις προστασίας συνήθως διαχειρίζονται μέσω GitHub settings ή GitLab protected branches.
Τρίτη αιτία — προβλήματα αυθεντικοποίησης. Παλιά διαπιστευτήρια, μετάβαση σε SSH ή αλλαγή personal access token. Λύση: ελέγξτε το remote URL (git remote -v) και ενημερώστε τα διαπιστευτήρια. Από το 2021, η GitHub κατήργησε την αυθεντικοποίηση με κωδικό για HTTPS — χρησιμοποιείται προσωπικό token ή κλειδί SSH.
Συχνές Ερωτήσεις
Το να κάνετε push σημαίνει αποστολή τοπικών commits από το αποθετήριο του προγραμματιστή σε έναν απομακρυσμένο διακομιστή (GitHub, GitLab). Μετά το push, οι αλλαγές γίνονται διαθέσιμες στην ομάδα, εμφανίζονται στο Pull Request και μπορούν να αναπτυχθούν. Push είναι το τελικό στάδιο της τοπικής εργασίας με κώδικα πριν από την ομαδική συνεργασία.
Το commit αποθηκεύει αλλαγές τοπικά, στο αποθετήριο του προγραμματιστή. Το push στέλνει αυτά τα τοπικά commits στον απομακρυσμένο διακομιστή. Μπορείτε να κάνετε πολλά commits χωρίς push, αλλά για να δουν οι συνάδελφοι τις αλλαγές, πρέπει να κάνετε push. Commit — αποθήκευση, push — δημοσίευση.
Το push απορρίπτεται εάν ο απομακρυσμένος κλάδος περιέχει commits που δεν υπάρχουν τοπικά. Λύση: εκτελέστε git pull (ή git fetch + git rebase), συγχωνεύστε τις αλλαγές και επαναλάβετε το push. Εάν εργάζεστε στον δικό σας feature κλάδο και είστε σίγουροι για τις αλλαγές, χρησιμοποιήστε git push --force-with-lease.
Ναι, αλλά με προσοχή. Χρησιμοποιήστε git revert <commit-hash> — δημιουργεί ένα commit που αντιστρέφει τις αλλαγές. Στη συνέχεια, κάντε push το νέο commit. Εάν πρέπει να αφαιρέσετε commits από την ιστορία, χρησιμοποιήστε git reset + git push --force-with-lease, αλλά μόνο στον δικό σας feature κλάδο. git revert είναι η ασφαλής επιλογή για κοινόχρηστους κλάδους.
Το τακτικό push αποτρέπει την απώλεια δεδομένων σε περίπτωση βλάβης του τοπικού υπολογιστή, μειώνει τις συγκρούσεις κατά τη συγχώνευση και παρέχει στην ομάδα ορατότητα της προόδου. Εάν ένας προγραμματιστής δεν κάνει push για μια εβδομάδα, οι αλλαγές του μπορεί να αποκλίνουν σημαντικά από τον main κλάδο, οδηγώντας σε περίπλοκες συγκρούσεις κατά το merge.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης