Για να κατανοήσετε τα commits, πρέπει πρώτα να οπτικοποιήσετε τις τρεις ζώνες μέσα από τις οποίες το Git μετακινεί τα αρχεία σας.
| Ζώνη | Περιγραφή | Εντολή για να εισέλθετε |
|---|---|---|
| Κατάλογος εργασίας | Τα αρχεία σας όπως τα επεξεργάζεστε | (άμεση επεξεργασία) |
| Ζώνη staging (index) | Οι αλλαγές που προετοιμάζετε να καταγράψετε | git add |
| Τοπικό αποθετήριο | Το μόνιμο ιστορικό των commits | git commit |
Αναλογία: προετοιμασία ενός δέματος. Ο κατάλογος εργασίας είναι το ακατάστατο γραφείο σας· η ζώνη staging είναι το κουτί όπου τοποθετείτε ό,τι θέλετε να στείλετε· το commit είναι η στιγμή που σφραγίζετε το κουτί και το αρχειοθετείτε.
Για να μετατρέψετε έναν συνηθισμένο φάκελο σε αποθετήριο Git:
# Τοποθέτηση στον φάκελο του έργου
cd mon-projet
# Αρχικοποίηση του αποθετηρίου
git initΑυτό δημιουργεί έναν κρυφό υποφάκελο .git/ που περιέχει όλο το ιστορικό και τη διαμόρφωση του αποθετηρίου.
# Επαλήθευση της κατάστασης του μόλις δημιουργημένου αποθετηρίου
git statusΠροσοχή: μην διαγράψετε ποτέ τον φάκελο
.git/: περιέχει όλο το ιστορικό. Η διαγραφή του ισοδυναμεί με απώλεια της εκδοσιοποίησης (αλλά όχι των τρεχόντων αρχείων σας).
🔧 Μικρή άσκηση — Γράψτε την εντολή που μετατρέπει τον τρέχοντα φάκελο σε αποθετήριο Git, και έπειτα εκείνη που εμφανίζει την κατάστασή του.
git init
git statusΈνα αρχείο μπορεί να είναι παρακολουθούμενο (tracked) ή μη παρακολουθούμενο (untracked) από το Git.
# Προετοιμασία ενός συγκεκριμένου αρχείου
git add fichier.txt
# Προετοιμασία όλων των αλλαγών του φακέλου
git add .
# Προβολή της κατάστασης (παρακολουθούμενο / μη παρακολουθούμενο / προετοιμασμένο)
git status| Εντολή | Αποτέλεσμα |
|---|---|
git add fichier.txt | Προετοιμάζει ένα συγκεκριμένο αρχείο |
git add . | Προετοιμάζει όλα τα τροποποιημένα/νέα αρχεία |
git restore --staged fichier.txt | Αφαιρεί ένα αρχείο από τη ζώνη staging |
git status | Εμφανίζει την κατάσταση κάθε αρχείου |
Το
git statusείναι ο καλύτερος φίλος σας: χρησιμοποιήστε το πριν και μετά από κάθεgit addγια να δείτε ακριβώς τι ετοιμάζεται να καταγράψει το Git.
🔧 Μικρή άσκηση — Μόλις τροποποιήσατε τα index.html και style.css. Γράψτε την εντολή που προετοιμάζει (stage) μόνο το index.html.
git add index.htmlΈνα commit είναι ένα στιγμιότυπο (snapshot) του έργου σας σε μια δεδομένη στιγμή, συνοδευόμενο από ένα μήνυμα που εξηγεί την αλλαγή.
# Προετοιμασία και έπειτα καταγραφή
git add .
git commit -m "Προσθήκη της αρχικής σελίδας"Κάθε commit διαθέτει:
| Στοιχείο | Περιγραφή |
|---|---|
| Ένα αναγνωριστικό (hash) | Π.χ. a1b2c3d… — μοναδικό |
| Έναν συγγραφέα | Το όνομά σας + ηλεκτρονικό ταχυδρομείο (διαμόρφωση του μαθήματος 05) |
| Μια ημερομηνία | Χρονική σήμανση του commit |
| Ένα μήνυμα | Η περιγραφή της αλλαγής |
| Έναν γονέα | Το προηγούμενο commit (αλυσίδα ιστορικού) |
# Προβολή του ιστορικού των commits
git log
git log --oneline # συμπαγής έκδοσηΈνα καλό commit είναι ατομικό: κάνει ένα μόνο συνεκτικό πράγμα. Αποφύγετε το commit-σακούλα «ένα σωρό πράγματα» — προτιμήστε πολλά μικρά σαφή commits.
🔧 Μικρή άσκηση — Προετοιμάστε όλες τις αλλαγές σας και δημιουργήστε ένα commit με μήνυμα «Προσθέτει τη σελίδα επικοινωνίας».
git add .
git commit -m "Προσθέτει τη σελίδα επικοινωνίας"Το μήνυμα commit αφηγείται την ιστορία του έργου. Ένα καλό μήνυμα εξοικονομεί ώρες σε όλη την ομάδα (και στον εαυτό σας σε 6 μήνες).
| Κακό μήνυμα | Καλό μήνυμα |
|---|---|
update | Ενημερώνει την εξάρτηση Maven στην 3.9 |
fix bug | Διορθώνει τη συντριβή στην εκκίνηση αν λείπει η διαμόρφωση |
wip | Προσθέτει την επικύρωση της φόρμας σύνδεσης |
feat: προσθέτει την αυθεντικοποίηση με διακριτικό
fix: διορθώνει τη σελιδοποίηση των αποτελεσμάτων
docs: συμπληρώνει το README εγκατάστασηςΜνημονικό κόλπο: ένα καλό μήνυμα πρέπει να συμπληρώνει τη φράση «Αν εφαρμόσω αυτό το commit, θα…». Παράδειγμα: «…προσθέσει την αρχική σελίδα».
Ορισμένα αρχεία δεν πρέπει ποτέ να εκδοσιοποιούνται: προσωρινά αρχεία, ογκώδεις εξαρτήσεις, μυστικά, μεταγλωττισμένα αρχεία. Το αρχείο .gitignore υποδεικνύει στο Git να τα αγνοεί.
# Παράδειγμα περιεχομένου ενός αρχείου .gitignore
target/
node_modules/
*.log
.env
.DS_Store| Να αγνοηθεί | Γιατί |
|---|---|
node_modules/, target/ | Ανακατασκευάζονται αυτόματα, ογκώδη |
.env, *.key | Μυστικά — ποτέ στο Git! |
*.log, *.tmp | Προσωρινά αρχεία χωρίς αξία |
Χρυσός κανόνας ασφαλείας: μην κάνετε ποτέ commit κωδικούς πρόσβασης, κλειδιά API ή μυστικά. Μόλις μπει στο ιστορικό Git, ένα μυστικό μένει εκεί — ακόμη και αν διαγραφεί αργότερα. Βάλτε το
.envστο.gitignoreαπό την αρχή.
🔧 Μικρή άσκηση — Γράψτε τη γραμμή που πρέπει να προσθέσετε σε ένα .gitignore για να εμποδίσετε το Git να εκδοσιοποιεί το αρχείο μυστικών .env.
.envQuestion 1 : Ποια εντολή μετατρέπει έναν συνηθισμένο φάκελο σε αποθετήριο Git;
a) git start
b) git init
c) git new
d) git create
✅ Απάντηση: b) — Το git init δημιουργεί τον υποφάκελο .git/ που περιέχει το ιστορικό και μετατρέπει τον φάκελο σε αποθετήριο.
Question 2 : Ποια είναι η σωστή σειρά των τριών ζωνών του Git;
a) Αποθετήριο → staging → κατάλογος εργασίας
b) Κατάλογος εργασίας → staging → τοπικό αποθετήριο
c) Staging → αποθετήριο → κατάλογος εργασίας
d) Κατάλογος εργασίας → αποθετήριο → staging
✅ Απάντηση: b) — Επεξεργάζεστε (κατάλογος εργασίας), προετοιμάζετε με git add (staging) και έπειτα καταγράφετε με git commit (τοπικό αποθετήριο).
Question 3 : Σε τι χρησιμεύει το git add;
a) Να δημιουργήσει ένα commit
b) Να προετοιμάσει αλλαγές στη ζώνη staging
c) Να διαγράψει ένα αρχείο
d) Να στείλει τον κώδικα στο GitHub
✅ Απάντηση: b) — Το git add μετακινεί τις αλλαγές από τον κατάλογο εργασίας στη ζώνη staging, πριν από το commit.
Question 4 : Ποιο είναι ένα καλό μήνυμα commit;
a) truc
b) wip
c) Διορθώνει τη συντριβή στην εκκίνηση αν λείπει η διαμόρφωση
d) .
✅ Απάντηση: c) — Είναι σαφές, σε προστακτική, και εξηγεί την αλλαγή. Τα υπόλοιπα είναι ασαφή και άχρηστα στο ιστορικό.
Question 5 : Γιατί να χρησιμοποιείτε ένα .gitignore;
a) Για να επιταχύνετε τον υπολογιστή
b) Για να εμποδίσετε το Git να εκδοσιοποιεί ορισμένα αρχεία (προσωρινά, μυστικά, εξαρτήσεις)
c) Για να διαγράψετε το ιστορικό
d) Για να αγνοείτε τα commits
✅ Απάντηση: b) — Το .gitignore απαριθμεί τα αρχεία που το Git πρέπει να αγνοεί, ιδίως τα μυστικά (.env) και τους ανακατασκευάσιμους φακέλους (node_modules/).
Δημιουργήστε ένα τοπικό αποθετήριο, προσθέστε ένα αρχείο, αγνοήστε ένα μυστικό αρχείο και κάντε δύο καθαρά commits.
# 1. Δημιουργία και είσοδος στον φάκελο
mkdir mon-premier-depot
cd mon-premier-depot
# 2. Αρχικοποίηση του αποθετηρίου
git init
# 3. Δημιουργία ενός αρχείου περιεχομένου και ενός .gitignore
echo "# Το έργο μου" > README.md
echo ".env" > .gitignore
echo "SECRET=123" > .env # αυτό το αρχείο πρέπει να αγνοηθεί
# 4. Επαλήθευση της κατάστασης (το .env ΔΕΝ πρέπει να εμφανίζεται)
git status
# 5. Πρώτο commit
git add README.md .gitignore
git commit -m "Αρχικοποιεί το έργο με README και gitignore"
# 6. Τροποποίηση και έπειτα δεύτερο commit
echo "Περιγραφή του έργου" >> README.md
git add README.md
git commit -m "Συμπληρώνει την περιγραφή στο README"
# 7. Συμβουλευτείτε το ιστορικό
git log --onelineΑναμενόμενο αποτέλεσμα:
b2c3d4e Συμπληρώνει την περιγραφή στο README
a1b2c3d Αρχικοποιεί το έργο με README και gitignoreΕπαληθεύστε ότι το
.envδεν εμφανίζεται ποτέ στοgit status: αυτή είναι η απόδειξη ότι το.gitignoreσας λειτουργεί και ότι το μυστικό σας προστατεύεται.
git add) → τοπικό αποθετήριο (git commit).git init δημιουργεί το αποθετήριο (φάκελος .git/)..gitignore προστατεύει τα μυστικά και αποκλείει τα άχρηστα αρχεία.Μάθημα 07 — Κλάδοι και ιστορικό: εργασία σε πολλές εκδόσεις παράλληλα χωρίς να σπάσετε την κύρια έκδοση.
Με την επιφύλαξη παντός δικαιώματος. Οποιαδήποτε αναπαραγωγή, διάδοση, χρήση ή προσαρμογή αυτού του μαθήματος, εν όλω ή εν μέρει, απαγορεύεται αυστηρά χωρίς την προηγούμενη γραπτή άδεια του Dr. Haythem REHOUMA.
Μάθημα δημιουργημένο από τον Dr. Haythem REHOUMA — Ανάπτυξη και ανάπτυξη λύσεων δεδομένων