Git, kod değişikliklerini takip eden dağıtık versiyon kontrol sistemidir. GitHub ise Git repository'lerini bulutta barındıran platform. Bu makale; ilk commit'ten başlayarak branch yönetimi, merge stratejileri ve GitHub PR sürecine kadar tüm temel Git iş akışını anlatıyor.
Git'i Anlama: Üç Alan
// PLAINTEXT //
Working Directory Staging Area Repository (.git)━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━Dosyaları düzenle git add git commit ←──────────── git restore
Git üç alanda çalışır. Değişiklikleri önce Staging'e ekler (git add), sonra commit'le kalıcı yapar.
Kurulum ve Yapılandırma
// BASH //
# Kullanıcı bilgileri — her commit'e eklenirgit config --global user.name "Adem Yılmaz"git config --global user.email "adem@example.com"# Varsayılan branch adıgit config --global init.defaultBranch main# VS Code'u varsayılan editor yapgit config --global core.editor "code --wait"# Güzel diff görünümügit config --global core.pager "less -FRX"# Ayarları kontrol etgit config --global --list
Temel İş Akışı
// BASH //
# Yeni repo başlatgit init my-projectcd my-project# veya GitHub'dan kopyalagit clone https://github.com/kullanici/repo.git# Durum kontrolü — her zaman buradan başlagit status# Değişiklikleri aşamalandırgit add app.ts # tek dosyagit add src/ # klasörgit add -p # interaktif — parça parça seç# Commit oluşturgit commit -m "feat: kullanıcı giriş formu eklendi"# Geçmişi görüntülegit log --oneline --graph --decorate
# Format: <type>(<scope>): <description>feat(auth): JWT refresh token mekanizması eklendifix(db): PostgreSQL bağlantı havuzu sızıntısı giderildidocs(api): endpoint dokümantasyonu güncellendichore(deps): Next.js 15.2.0'a yükseltildirefactor(posts): repository katmanı ayrıştırıldıtest(auth): login controller unit testleri eklendistyle: Prettier formatlaması uygulandıperf(queries): N+1 sorgu eager loading ile optimize edildi# Türkçe commit mesajı da kabul edilirgit commit -m "feat(ders): Python async dersi eklendi"
Stash: Geçici Değişiklik Saklama
// BASH //
# Yarım kalan değişikliği saklagit stash push -m "login formu - yarım kaldı"# Başka bir branch'e geç, orada çalış...# Geri dön ve değişikliği geri getirgit stash pop # son stash'ı uygula + silgit stash apply stash@{0} # uygula ama listede bırak# Stash listesigit stash list
Git Log: Geçmişi Keşfet
// BASH //
# Güzel grafik görünümügit log --oneline --graph --decorate --all# Belirli bir dosyanın geçmişigit log --follow -p src/auth/login.ts# Belirli bir geliştiricigit log --author="Adem" --since="2 weeks ago"# Belirli bir ifade içeren commit'lergit log --grep="fix" --oneline# İki commit arasındaki değişikliklergit diff v1.0.0..v1.1.0 -- src/# Dosyayı kimin yazdığını bulgit blame src/lib/jwt.ts
GitHub Pull Request İş Akışı
// BASH //
# 1. Feature branch oluşturgit switch -c feature/dark-mode# 2. Geliştir, commit etgit add .git commit -m "feat(ui): dark mode toggle eklendi"# 3. Remote'a push etgit push origin feature/dark-mode# 4. GitHub'da PR aç (veya gh CLI)gh pr create --title "Dark mode desteği" \ --body "Sistem tercihi ve manuel toggle desteklendi"# 5. Review sonrası main'e merge# GitHub'dan yapılır (Squash merge önerilir)# 6. Local'i temizlegit switch maingit pullgit branch -d feature/dark-mode
Özet
Git'in temeli üç alandan geçer: working directory → git add → staging → git commit → repository. Branch oluştur, feature geliştir, main'e merge et veya rebase yap. Conflict çıkınca dosyayı düzenle, git add yap, commit et. GitHub PR'ı merge edilince local branch'i sil, main'i pull et. Conventional Commits formatı ekiple çalışmayı kolaylaştırır.