Ασκήσεις Git - Δοκιμή Πρακτική

1 λεπτά

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

  1. Άσκηση 1: Βασικά
  2. Άσκηση 2: Κλάδοι
  3. Άσκηση 3: Merge έναντι rebase
  4. Άσκηση 4: Stash και cherry-pick
  5. Άσκηση 5: Επείγον και reset

Άσκηση 1: Βασικά

Αποστολή: Δημιουργήστε ένα έργο, κάντε 3 commits, διορθώστε το τελευταίο.

bash
mkdir test-git && cd test-git && git init

# 3 commits
echo "print('v1')" > app.py && git add . && git commit -m "Version 1"
echo "print('v2')" > app.py && git add . && git commit -m "Version 2"  
echo "print('v3 with bug')" > app.py && git add . && git commit -m "Version 3"

# Διόρθωση του τελευταίου commit
echo "print('v3 fixed')" > app.py && git add . && git commit --amend -m "Version 3 - Fixed"

Επαλήθευση: git log --oneline → 3 commits, το τελευταίο λέει "Fixed"

Επιστροφή στον πίνακα περιεχομένων

Άσκηση 2: Κλάδοι

Αποστολή: 2 λειτουργίες παράλληλα, καθαρή συγχώνευση.

bash
# Βάση
echo "print('main')" > main.py && git add . && git commit -m "Main app"

# Λειτουργία 1  
git checkout -b feature-login
echo "print('login')" > login.py && git add . && git commit -m "Add login"

# Λειτουργία 2
git checkout main && git checkout -b feature-api
echo "print('api')" > api.py && git add . && git commit -m "Add API"

# Συγχώνευση όλων στο main
git checkout main
git merge feature-login
git merge feature-api

# Καθαρισμός
git branch -d feature-login feature-api

Επαλήθευση: git log --graph --oneline → προβολή των merges

Επιστροφή στον πίνακα περιεχομένων

Άσκηση 3: Merge έναντι rebase

Αποστολή: Ίδιο σενάριο, 2 διαφορετικές στρατηγικές.

Στρατηγική A: Merge

bash
mkdir test-merge && cd test-merge && git init
echo "print('base')" > app.py && git add . && git commit -m "Base"

# Κλάδος feature
git checkout -b feature
echo "print('feature')" > feature.py && git add . && git commit -m "Add feature"

# Το main προχωρά
git checkout main
echo "print('base v2')" > app.py && git add . && git commit -m "Update base"

# Merge
git merge feature
git log --graph --oneline    # Προβολή του ιστορικού με merge

Στρατηγική B: Rebase

bash
mkdir test-rebase && cd test-rebase && git init
echo "print('base')" > app.py && git add . && git commit -m "Base"

git checkout -b feature  
echo "print('feature')" > feature.py && git add . && git commit -m "Add feature"

git checkout main
echo "print('base v2')" > app.py && git add . && git commit -m "Update base"

# Rebase
git checkout feature && git rebase main
git checkout main && git merge feature
git log --oneline           # Γραμμικό ιστορικό

Ερώτηση: Ποια διαφορά βλέπετε στο git log;

Επιστροφή στον πίνακα περιεχομένων

Άσκηση 4: Stash και cherry-pick

Αποστολή: Ζογκλέρ με πολλές εργασίες.

bash
mkdir test-stash && cd test-stash && git init
echo "print('v1')" > app.py && git add . && git commit -m "Version 1"

# Αρχίζετε να γράφετε κώδικα
echo "print('work in progress')" >> app.py

# ΕΠΕΙΓΟΝ! Πρέπει να αλλάξετε κλάδο
git stash                    # Αποθήκευση
git checkout -b hotfix
echo "print('URGENT FIX')" > fix.py && git add . && git commit -m "Critical fix"

# Cherry-pick της διόρθωσης προς το main
git checkout main
git cherry-pick <hash-du-fix>

# Επιστροφή στην εργασία σας
git stash pop
echo "print('feature complete')" >> app.py && git add . && git commit -m "Feature done"

Πρόκληση: Η επείγουσα διόρθωση είναι στο main ΚΑΙ στο hotfix;

Επιστροφή στον πίνακα περιεχομένων

Άσκηση 5: Επείγον και reset

Αποστολή: Προσομοίωση επείγοντος με reset.

bash
mkdir test-urgence && cd test-urgence && git init

# Πολλά commits
echo "print('v1')" > app.py && git add . && git commit -m "Version 1"
echo "print('v2')" > app.py && git add . && git commit -m "Version 2"  
echo "print('v3')" > app.py && git add . && git commit -m "Version 3"
echo "print('v4 BROKEN')" > app.py && git add . && git commit -m "Version 4 - Bug!"

# Ωχ όχι! Η v4 σπάει τα πάντα στην παραγωγή
git log --oneline                    # Σημειώστε το hash της v3

# Λύση 1: Reset hard (καταστροφικό)
git reset --hard <hash-v3>           # Επιστροφή στην v3, η v4 εξαφανίζεται
git log --oneline                    # Μόνο 3 commits πλέον

# Λύση 2: Revert (ασφαλές)  
# Επαναφορά της v4 πρώτα
git reset --hard <hash-v4>           # Επιστροφή στην v4
git revert HEAD                      # Δημιουργία commit που ακυρώνει την v4
git log --oneline                    # 5 commits: v1,v2,v3,v4,revert-v4

Μάθημα: Revert = ασφαλές για την παραγωγή, Reset = ΟΚ για τοπικό

Επιστροφή στον πίνακα περιεχομένων


ΤΕΛΙΚΗ ΠΡΟΚΛΗΣΗ

Μπορείτε να τα κάνετε όλα σε 15 λεπτά;

  1. Έργο με 3 commits
  2. 2 κλάδοι με λειτουργίες
  3. 1 merge + 1 rebase
  4. 1 stash + 1 cherry-pick
  5. 1 επείγον reset ή revert

Αν ναι → κατέχετε το Git!

Επιστροφή στον πίνακα περιεχομένων