🔀 Git & GitHub Süvitsi
Branching, merging, konfliktide lahendamine, Pull Request'id ja meeskonnatöö — kõik mida vajad professionaalseks versioonihalduseks.
📋 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.
# 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:
# 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:
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;
}
}
# 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.
# 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
# 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
# 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
# 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-systemharu. 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
ghabil. 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 -iet koondada need 2 loogiliseks commit'iks. Kontrolligit 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 bisectet leida täpselt see commit mis vea tekitas. Dokumenteeri protsess.