🌿 Git Workflow
Branch stratejisi, commit conventions ve Git best practices rehberi.
📋 İçindekiler
1. Branching Stratejileri
Git Flow
main (production)
└── develop
├── feature/user-auth
├── feature/payment
└── release/v1.2.0
└── hotfix/critical-bug
GitHub Flow (Önerilen - Basit)
main (always deployable)
├── feature/add-login
├── fix/button-style
└── chore/update-deps
Branch Naming
# Feature
feature/user-authentication
feature/JIRA-123-add-payment
# Bug Fix
fix/login-redirect-issue
bugfix/memory-leak
# Hotfix (production)
hotfix/critical-security-patch
# Other
chore/update-dependencies
refactor/auth-module
docs/api-documentation
2. Commit Conventions
Conventional Commits
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
Types
| Type | Açıklama |
|------|----------|
| feat | Yeni özellik |
| fix | Bug düzeltme |
| docs | Dokümantasyon |
| style | Formatting (kod değişikliği yok) |
| refactor | Refactoring |
| perf | Performans iyileştirme |
| test | Test ekleme/düzeltme |
| chore | Build, CI, dependencies |
| ci | CI configuration |
| revert | Revert commit |
Örnekler
feat(auth): add OAuth2 login support
fix(api): resolve null pointer in user endpoint
Closes #123
refactor!: drop support for Node 14
BREAKING CHANGE: Minimum Node version is now 18
chore(deps): update lodash to 4.17.21
Commit Message Rules
✅ DOĞRU:
- Imperative mood: "Add feature" (not "Added" or "Adds")
- 50 karakter başlık limiti
- Büyük harfle başla, nokta koyma
- Açıklayıcı body (neden, nasıl)
❌ YANLIŞ:
- "Fixed stuff"
- "WIP"
- "asdfasdf"
- "Updated code"
3. Merge vs Rebase
Merge
# Feature branch'i main'e merge
git checkout main
git merge feature/user-auth
# Merge commit oluşturur
# History korunur
Rebase
# Feature branch'i main üzerine rebase
git checkout feature/user-auth
git rebase main
# Linear history
# Commit'ler yeniden yazılır
Ne Zaman Hangisi?
| Durum | Strateji | |-------|----------| | Public/shared branch | Merge | | Local feature branch | Rebase | | Main'e feature merge | Squash merge | | Hotfix | Merge |
Squash Merge
git checkout main
git merge --squash feature/user-auth
git commit -m "feat(auth): add user authentication"
4. Conflict Resolution
Conflict Markers
<<<<<<< HEAD
Current branch content
=======
Incoming branch content
>>>>>>> feature-branch
Resolution Steps
# 1. Conflict'leri gör
git status
# 2. Dosyaları düzenle (markers kaldır)
# 3. Çözümlenmiş dosyaları stage
git add <resolved-file>
# 4. Merge/rebase devam
git merge --continue
# veya
git rebase --continue
VS Code ile
# Accept Current Change
# Accept Incoming Change
# Accept Both Changes
# Compare Changes
Abort
git merge --abort
git rebase --abort
5. Useful Commands
History
# Güzel log
git log --oneline --graph --all
# Son 10 commit
git log -10 --oneline
# Dosya history
git log --follow -p -- path/to/file
Undo
# Son commit'i geri al (değişiklikleri koru)
git reset --soft HEAD~1
# Son commit'i tamamen geri al
git reset --hard HEAD~1
# Commit'i revert et (yeni commit oluştur)
git revert <commit-hash>
# Staged dosyayı unstage
git restore --staged <file>
# Değişiklikleri geri al
git restore <file>
Stash
# Değişiklikleri sakla
git stash
# Mesajla sakla
git stash push -m "WIP: feature X"
# Stash listesi
git stash list
# Son stash'i uygula
git stash pop
# Belirli stash'i uygula
git stash apply stash@{2}
Interactive Rebase
# Son 3 commit'i düzenle
git rebase -i HEAD~3
# Açılan editörde:
pick abc1234 First commit
squash def5678 Second commit # Öncekiyle birleştir
reword ghi9012 Third commit # Mesajı değiştir
Cherry Pick
# Belirli commit'i al
git cherry-pick <commit-hash>
# Birden fazla
git cherry-pick <hash1> <hash2>
Git Workflow v1.1 - Enhanced
🔄 Workflow
Aşama 1: Branching
- [ ] Strategy: Çoğu ekip için "Trunk Based Development" (kısa ömürlü feature branch'ler) kullan.
- [ ] Naming:
feat/fix/ön eklerini standartlaştır. - [ ] Lifetime: Branch ömrü 2 günü geçmemeli. Geçiyorsa parçala.
Aşama 2: Committing
- [ ] Atomic: Bir commit sadece bir şeyi değiştirmeli.
- [ ] Message:
feat(auth): add loginformatını (Conventional Commits) zorunlu tut. - [ ] Verification:
pre-commithook ile linter/test çalıştır.
Aşama 3: Merging
- [ ] Review: Code Owner onayı olmadan merge etme.
- [ ] Method: Geçmişi temiz tutmak için
Squash Mergetercih et. - [ ] Cleanup: Merge sonrası branch'i sil.
Kontrol Noktaları
| Aşama | Doğrulama |
|-------|-----------|
| 1 | Main branch her an deploy edilebilir (Green) durumda mı? |
| 2 | git log --oneline okunduğunda bir hikaye anlatıyor mu? |
| 3 | Conflict çözülürken kod kaybı yaşanma riski var mı? |