MOODUL 04 · TASE 2 — EDASIJÕUDNUD

🔀 Git & GitHub Süvitsi

Branching, merging, konfliktide lahendamine, Pull Request'id ja meeskonnatöö — kõik mida vajad professionaalseks versioonihalduseks.

⏱️ ~4-5 tundi 📝 6 harjutust 🟡 Edasijõudnud

📋 Eeldused

ℹ️

Peaksid olema läbinud Moodul 01 ja tundma git add/commit/push käske.

🌿 Samm 1 — Branching Strateegia

Harud (branches) võimaldavad paralleelselt arendust ilma põhikoodi rikkumata. Iga feature saab oma haru.

Terminal — Harude haldus
# Loo uus feature haru ja liigu sinna
git checkout -b feature/player-movement

# Vaata kõiki harusid
git branch -a

# Liigu tagasi main harule
git checkout main

# Kustuta kohalik haru
git branch -d feature/player-movement

# Kustuta serveri haru
git push origin --delete feature/player-movement

Professionaalne haru nimetus:

Prefiks Kasutus Näide
feature/ Uus funktsionaalsus feature/inventory-system
fix/ Vea parandus fix/collision-bug
refactor/ Koodi restruktureerimine refactor/entity-system
hotfix/ Kiire parandus tootmises hotfix/save-crash

🔄 Samm 2 — Merging ja Rebase

Kaks viisi kuidas harusid kokku liita:

Terminal — Merge
# Merge — loob merge commit'i (säilitab ajaloo)
git checkout main
git merge feature/player-movement

# Rebase — kirjutab ajaloo ümber (lineaarne ajalugu)
git checkout feature/player-movement
git rebase main

# Interaktiivne rebase — commit'ide koondamine
git rebase -i HEAD~3
# Avanenud editoris:
# pick abc1234 Lisa mängija liikumine
# squash def5678 Paranda kiirus
# squash ghi9012 Lisa animatsioon
⚠️

Rebase reegel: Ära kunagi tee rebase'i harudele mis on juba serverisse push'itud ja mida teised kasutavad! See tekitab konflikte.

⚡ Samm 3 — Konfliktide Lahendamine

Kui kaks haru muudavad sama rida, tekib merge conflict. Git märgib konflikti kohad:

Konflikti näide — player.js
class Player {
  constructor() {
<<<<<<< HEAD
    this.speed = 5;       // main haru versioon
=======
    this.speed = 3;       // feature haru versioon
>>>>>>> feature/player-balance
    this.health = 100;
  }
}

// Lahendus — vali õige, kustuta markerid:
class Player {
  constructor() {
    this.speed = 4;       // kompromiss!
    this.health = 100;
  }
}
Terminal — Konflikti lahendamine
# Pärast konflikti lahendamist:
git add player.js
git commit -m "fix: lahenda merge conflict - mängija kiirus"

# Kasuta VS Code merge editor'it:
# Ava konflikti fail → VS Code näitab "Accept Current", "Accept Incoming", "Accept Both"

# Abort merge kui läheb untsu:
git merge --abort

🔍 Samm 4 — Pull Request'id ja Code Review

Pull Request (PR) on professionaalse arenduse nurgakivi — kood vaadatakse üle enne main haruga liitmist.

Terminal — PR workflow
# 1. Loo feature haru
git checkout -b feature/score-system

# 2. Tee muudatused ja commit'id
git add .
git commit -m "feat: lisa punktisüsteem"

# 3. Push serverisse
git push -u origin feature/score-system

# 4. Loo PR GitHub CLI-ga
gh pr create --title "Lisa punktisüsteem" \
  --body "## Muudatused
  - Punktide kogumine
  - Highscore localStorage'is
  - Punktide kuvamine HUD-is" \
  --base main

# 5. Vaata PR-e
gh pr list
gh pr view 1

# 6. Merge PR
gh pr merge 1 --squash

🏷️ Samm 5 — Git Tags ja Releases

Terminal — Versioonid
# Loo annotatsiooniga tag
git tag -a v1.0.0 -m "Esimene versioon - põhimängu funktsioonid"

# Vaata tage
git tag -l

# Push tag serverisse
git push origin v1.0.0

# Push kõik tagid
git push origin --tags

# Loo GitHub release
gh release create v1.0.0 --title "v1.0.0 — Esimene versioon" \
  --notes "### Uued funktsioonid
- Mängija liikumine
- Kokkupõrke tuvastamine
- Punktisüsteem"
💡

Semantic Versioning: MAJOR.MINOR.PATCH — v1.0.0 → v1.1.0 (uus feature) → v1.1.1 (bugfix) → v2.0.0 (breaking change).

🔧 Samm 6 — Git Stash ja Cherry-Pick

Terminal — Kasulikud käsud
# Stash — peida pooleli töö ajutiselt
git stash
git stash push -m "pooleli inventory süsteem"
git stash list
git stash pop          # Taasta viimane stash
git stash apply stash@{1}  # Taasta konkreetne stash

# Cherry-pick — kopeeri üks commit teisest harust
git cherry-pick abc1234

# Git log — ilus ajalugu
git log --oneline --graph --all

# Blame — kes muutis seda rida?
git blame player.js

# Bisect — leia commit mis tekitas vea
git bisect start
git bisect bad          # Praegune on vigane
git bisect good v1.0.0  # See versioon töötas
# Git kontrollib automaatselt commit'e, ütle kas hea/halb

📁 Samm 7 — .gitignore ja Repo Struktuur

.gitignore — Mänguprojekt
# Sõltuvused
node_modules/
package-lock.json

# Build väljund
dist/
build/

# Keskkonna muutujad
.env
.env.local

# IDE seaded
.vscode/settings.json
.idea/

# OS failid
.DS_Store
Thumbs.db

# Mängu-spetsiifilised
*.psd          # Photoshop originaalid
*.blend        # Blender failid
*.fbx          # Suurte 3D mudelite originaalid
temp/
*.log

📝 Harjutused

  • Feature Branch workflow

    Loo oma mänguprojektis uus feature/enemy-system haru. Lisa koodi, tee 3 commit'i, merge'i tag main'i ja kustuta feature haru.

  • Merge konflikti harjutus

    Loo tahtlikult merge conflict: muuda samas failis sama rida kahes erinevas harus. Lahenda VS Code merge editor'iga.

  • Pull Request GitHub'is

    Loo feature haru, push serverisse ja loo PR gh abil. Lisa kirjeldus, märgi PR kui draft, seejärel merge'i squash strateegiaga.

  • Interactive Rebase

    Tee 5 väikest commit'i ühes harus. Kasuta git rebase -i et koondada need 2 loogiliseks commit'iks. Kontrolli git log-iga tulemust.

  • Versioonimine ja Release

    Lisa projektile semantic versioning — loo tagid v0.1.0, v0.2.0 ja v1.0.0. Loo GitHub release iga versiooni jaoks koos release notes'iga.

  • Git Bisect vealeidmine

    Lisa 10 commit'i kus ühes tekib viga. Kasuta git bisect et leida täpselt see commit mis vea tekitas. Dokumenteeri protsess.

← Moodul 03b Moodul 05: Phaser.js →