DEVOPS // GITD::02 BAŞLANGIÇ+
16m READCOMPLETION: 88%ID::GIT-101

GİT İLE VERSİYON KONTROLÜ TEMELLERİ

Branch yönetimi, commit konvansiyonları ve rebase stratejileri

Git, dağıtık versiyon kontrol sistemidir. Dosyalarınızın her versiyonunu saklar, ekip içi paralel geliştirmeyi yönetir ve herhangi bir ana geri dönmenizi sağlar. Modern yazılım geliştirmenin temel taşıdır.

Temel Kavramlar

KavramAçıklama
Repository (Repo)Projenin tüm commit geçmişini içeren dizin
Working DirectoryAktif olarak düzenlediğiniz dosyalar
Staging Area (Index)Commit'e hazırlanan değişikliklerin bölgesi
CommitStaging'deki değişikliklerin kalıcı kaydı
BranchParalel geliştirme hattı
RemoteUzak sunucudaki repo (GitHub, GitLab)

Kurulum ve İlk Ayarlar

Temel İş Akışı

Branch Yönetimi

// BASH //
# Branch oluştur ve geç
git switch -c feature/login-sayfasi
 
# Branch listesi
git branch -a   # Tüm branchlar (local + remote)
 
# Branch değiştir
git switch main
 
# Branchları birleştir
git switch main
git merge feature/login-sayfasi
 
# Branch sil
git branch -d feature/login-sayfasi       # Birleştirilmiş branch
git branch -D feature/deneme              # Zorla sil
 
# Uzak branch'ı getir ve takip et
git switch -c feature/backend origin/feature/backend

Commit Geçmişi

// BASH //
# Geçmişi görüntüle
git log --oneline --graph --all   # Kompakt grafik görünüm
git log --author="Ali"            # Belirli yazar
git log --since="1 week ago"      # Zaman filtresi
git log -p -- dosya.txt           # Dosyanın diff geçmişi
 
# Belirli commit'i incele
git show abc1234
 
# Değişiklikleri karşılaştır
git diff                          # Unstaged değişiklikler
git diff --staged                 # Staged değişiklikler
git diff main..feature/login      # Branchlar arası

Uzak Repo İşlemleri

Geri Alma İşlemleri

// BASH //
# Staged değişikliği unstage'e al
git restore --staged dosya.txt
 
# Çalışma dizinindeki değişikliği geri al (dikkat: kalıcı!)
git restore dosya.txt
 
# Commit'i geri al — yeni geri alma commit'i oluşturur (güvenli)
git revert HEAD
git revert abc1234
 
# Commit'i geri al — geçmişi yeniden yazar (push'tan ÖNCE)
git reset --soft HEAD~1   # Son commit'i geri al, değişiklikler staged
git reset --mixed HEAD~1  # Son commit'i geri al, değişiklikler unstaged
git reset --hard HEAD~1   # Son commit'i ve değişiklikleri tamamen sil

Stash — Geçici Saklama

// BASH //
# Değişiklikleri geçici sakla
git stash push -m "login formu yarım kaldı"
 
# Stash listesi
git stash list
 
# Son stash'ı uygula
git stash pop
 
# Belirli stash'ı uygula
git stash apply stash@{2}
 
# Stash'ı sil
git stash drop stash@{0}
git stash clear   # Hepsini sil

Rebase — Temiz Geçmiş

// BASH //
# Feature branch'ı main'in üstüne taşı
git switch feature/login
git rebase main
 
# Etkileşimli rebase — commit'leri düzenle
git rebase -i HEAD~3   # Son 3 commit'i düzenle
# Editörde:
# pick abc1234 feat: login formu
# squash def5678 fix: typo düzeltme   ← öncekiyle birleştir
# reword ghi9012 feat: şifre reset    ← mesajı değiştir

Commit Mesajı Konvansiyonu

Conventional Commits standardı:

// PLAINTEXT //
<tip>(<kapsam>): <kısa açıklama>
 
[opsiyonel gövde]
 
[opsiyonel altbilgi]
TipKullanım
featYeni özellik
fixHata düzeltme
docsSadece dokümantasyon
styleBiçimlendirme (mantık değişikliği yok)
refactorKod yeniden yapılandırma
testTest ekleme/düzenleme
choreBuild, CI/CD, bağımlılık güncellemeleri
// BASH //
# Örnekler
git commit -m "feat(auth): JWT ile kullanici girisi eklendi"
git commit -m "fix(api): 404 hatasi donduruldugunde crash duzeldi"
git commit -m "docs: API endpoint dokumantasyonu guncellendi"
git commit -m "refactor(db): sorgu optimizasyonu yapildi"

.gitignore

// GITIGNORE //
# Bağımlılıklar
node_modules/
vendor/
 
# Ortam dosyaları (ASLA commit etmeyin!)
.env
.env.local
.env.*.local
 
# Build çıktıları
dist/
build/
.next/
__pycache__/
*.pyc
 
# IDE dosyaları
.vscode/
.idea/
*.swp
 
# İşletim sistemi
.DS_Store
Thumbs.db
 
# Log dosyaları
*.log
logs/

Sonuç

Git'i etkin kullanmak; güvenle deneme yapmanızı, ekibinizle çatışmasız çalışmanızı ve hataları hızla geri almanızı sağlar. Bir sonraki derste GitHub Flow ve Pull Request iş akışını ele alacağız.