GIT EĞİTİMİ
Git eğitimi, aracı "commit push" çiftinin ötesine taşıyıp kurtarıcı komutlara da hâkim olan mühendis yetiştirir. Working directory, staging area ve repository üçlemesinin ayrımı sezgisel anlatılır; commit graph'ı linear ve branched zihin haritasıyla okuma alışkanlığı kazandırılır.
Program sonunda katılımcı, merge ve rebase arasında ekip akışına göre karar verir; cherry-pick, revert ve reset'i risk farkıyla kullanır. Git Flow, GitHub Flow ve trunk-based stratejileri ekibe uygulanır; reflog, bisect ve stash gibi kurtarıcı komutlar rutine alınır. Eğitim akışı Git resmi belgeleri referans alınarak şekillenir.
Katılımcı Profili
Bu eğitim, Git'i "commit push" çiftinin ötesine taşımak isteyen rollere yöneliktir:
- Yazılım Geliştiriciler: Günlük git akışını derinleştirmek isteyen mühendisler
- DevOps Mühendisleri: CI hattında git workflow tasarlayan roller
- Teknik Liderler: Branching stratejisi ve code review akışı belirleyenler
- Yeni Mezunlar: Version control disiplinini sıfırdan öğrenmek isteyenler
- Open Source Katkıcıları: Fork, PR ve upstream workflow'una hakim olmak isteyenler
Ön Gereklilikler
Bu eğitime katılım için ileri seviye bilgi gerekmez; aşağıdaki yetkinlikler yardımcı olur:
- En az bir programlama dilinde küçük proje yazma deneyimi
- Komut satırı (Bash, Zsh veya PowerShell) ile temel rahatlık
- Bir editör veya IDE kullanım deneyimi
- Klasör, dosya ve diff kavramlarına giriş düzeyi aşinalık
- Bir GitHub, GitLab veya Bitbucket hesabıyla deneyimleme isteği
Süresi ve Tarihi
Süre: 2 gün. Bu süre standart program içindir; ek modüllere ve hedefe göre süre özelleştirilebilir.
Eğitim tarihleri ve saatleri, ekibinizin uygunluğuna göre birlikte planlanır.
Kazanımlar
Eğitim sonunda katılımcı, Git'i "commit push" çiftinin ötesine taşır — kurtarıcı komutlara da hâkim olur:
- Working directory, staging area ve repository üçlemesini fark eder
- Commit graph'ı linear ile branched zihin haritasıyla okur
- Merge ve rebase arasında ekip akışına göre seçim yapar
- Cherry-pick, revert ve reset arasındaki risk farkıyla kullanır
- Git Flow, GitHub Flow ve trunk-based stratejilerini ekibe uygular
- Submodule ile subtree arasında çoklu repo bağımlılığını yönetir
- reflog, bisect ve stash gibi kurtarıcı komutları rutine sokar
Git Eğitimi Konuları
1. Git'in Mimarisi - Plumbing ve Porcelain
- Distributed VCS: lokal ve uzak repo eşitliği
- Porcelain (kullanıcı dostu) ve plumbing (alt seviye) komutlar
- .git klasör yapısı ve içeriği
- Snapshot tabanlı modelleme (delta değil)
2. Commit, Tree, Blob, Tag Nesneleri
- Object database: blob, tree, commit, tag
- SHA-1 hash ve content-addressed storage
- git cat-file ve git ls-tree komutları
- Annotated tag ve lightweight tag farkı
3. Branch, HEAD ve Reference
- Branch: commit'e işaret eden hareketli pointer
- HEAD ve detached HEAD durumu
- Reference (refs) ve symbolic ref
- Reflog ile yerel değişiklik geçmişi
4. Merge, Rebase ve Fast-Forward
- Three-way merge algoritması
- Fast-forward vs no-ff merge
- Rebase ile lineer geçmiş
- "Golden rule": shared branch'i rebase'leme
- Merge vs rebase felsefi tartışması
5. Interactive Rebase ve History Düzeltme
- git rebase -i ile commit düzenleme
- squash, fixup, reword, drop komutları
- Commit splitting ve birleştirme
- Force push (--force-with-lease) güvenliği
6. Cherry-Pick ve Patch Yönetimi
- Cherry-pick ile commit transferi
- git format-patch ve git am
- Commit message convention'ları
- Conventional Commits standardı
7. Stash, Worktree ve Bisect
- git stash ile geçici saklama
- git worktree ile çoklu çalışma dizini
- git bisect ile binary search debug
- git blame ile satır bazlı tarih
8. Conflict Resolution Stratejileri
- Conflict marker okuma (<<<<, ====, >>>>)
- git mergetool ile görsel araç
- Ours, theirs, manual çözüm
- git rerere ile tekrar eden conflict
9. Remote, Push, Pull, Fetch
- origin, upstream remote tanımları
- git fetch ve git pull farkı
- Tracking branch ve upstream set
- git pull --rebase davranışı
10. Pull Request ve Code Review Akışı
- Fork-and-PR model (GitHub)
- Branch protection rule
- Code review etiketi ve disiplini
- Draft PR ve work-in-progress
11. Tag, Release ve Semantic Versioning
- Lightweight ve annotated tag
- Semantic versioning (MAJOR.MINOR.PATCH)
- GitHub Release ve changelog
- Otomatik release: semantic-release, Changesets
12. Submodule ve Subtree
- git submodule: nested repo
- git subtree: alt proje gömme
- Monorepo alternatifleri (Nx, Turborepo)
- Submodule problemleri ve önleme
13. Git Hooks ve Otomasyon
- pre-commit, commit-msg, pre-push hook'ları
- pre-commit framework (Python)
- husky ve lint-staged (JS)
- Server-side hook ve audit
14. Reflog ve Veri Kurtarma
- git reflog ile silinen commit'i bulma
- git fsck ile dangling object
- Reset, revert, restore farkı
- Force push'tan sonra kurtarma
GIT EĞİTİMİ ile İlgili
Sıkça Sorulan Sorular ve Cevapları
Merge ve rebase arasında ekip için doğru seçim nedir?
Merge tarihçeyi olduğu gibi korur ve merge commit ekler — paylaşılan branch'te güvenli. Rebase commit'leri lineer hale getirir, history temizdir ama paylaşılan branch'te rebase 'force push' gerektirir ve diğer geliştiricileri zorlar. Yaygın kural: kendi branch'inde rebase, paylaşılan main'e merge.
git reset, revert ve checkout arasındaki risk farkı nedir?
git reset --hard local history'yi siler, çalışılan dosyayı kaybeder — push'lanmadan kullanılır. git revert yeni commit ekleyerek geri alır, paylaşılan history için güvenli. git checkout (artık restore + switch) dosya veya branch değiştirir; --force ile uncommitted değişiklik kaybedilir.
Git Flow, GitHub Flow ve trunk-based nasıl ayırt edilir?
Git Flow: develop, feature, release, hotfix branch'leri; ağır süreç, yavaş tempolu ürünler için. GitHub Flow: main + short-lived feature branch + PR; SaaS sürekli teslimat için yaygın. Trunk-based: küçük commit'ler doğrudan main'e, feature flag ile koruma; high-velocity ekiplerde tercih edilir.
Cherry-pick ne zaman doğru, ne zaman tehlikeli?
Hotfix'i prod branch'ten release branch'e taşıma gibi tek commit kopyalamada doğrudur. Tehlike: cherry-pick aynı değişikliği farklı commit hash'iyle çoğaltır, sonradan merge edilirse conflict ve duplicate commit oluşur. Karmaşık değişikliklerde rebase veya temiz merge tercih edilir.
Submodule ile subtree arasında nasıl seçim yapılır?
Submodule ayrı repo'yu reference olarak tutar — versiyon sabit, repo boyutu küçük, ama clone ve update karmaşık. Subtree alt repo'yu doğrudan dahil eder — kullanım kolay ama push/pull boilerplate gerektirir. Monorepo trendi ikisinden de uzaklaşıp tek repo + workspace pattern'ine yöneliyor.
reflog ve bisect ne zaman hayat kurtarır?
reflog HEAD'in son hareketlerini tutar — yanlış reset, silinen branch, kaybedilen commit reflog'dan geri alınır. bisect binary search ile hangi commit'in regression'ı tetiklediğini bulur — uzun history'de manuel aramaya göre 10x hızlı. İkisi 'oh hayır' anlarının standart araçları.



