Git ve Versiyon Kontrolü: Temel Komutlar ve İş Akışları
Git, modern yazılım geliştirmenin temel aracıdır. Bu rehberde Git'in temel komutlarını, branching stratejilerini ve iş akışlarını anlatıyoruz.
Son güncelleme:Git Nedir ve Neden Kullanılır?
Git, dağıtık bir versiyon kontrol sistemidir. Kod değişikliklerini takip eder, farklı versiyonları yönetir ve ekip çalışmasını kolaylaştırır.
Dağıtık yapı: Her geliştirici, tam bir repository kopyasına sahiptir. Bu, offline çalışma ve hızlı işlem yapmayı sağlar.
Branching: Farklı özellikler veya düzeltmeler için ayrı branch'ler oluşturun. Bu, ana kodu (main/master) her zaman stabil tutar.
Merge ve rebase: Branch'leri ana branch ile birleştirin. Merge, commit geçmişi korur. Rebase, lineer bir geçmiş oluşturur.
Temel Git Komutları
git init: Yeni bir repository oluşturun. git clone <url>: Mevcut repository'yi kopyalayın.
git add <file>: Değişiklikleri staging area'ya ekleyin. git add .: Tüm değişiklikleri ekleyin.
git commit -m "mesaj": Staging area'daki değişiklikleri commit'leyin. Anlamlı commit mesajları yazın.
git status: Repository durumunu kontrol edin. git log: Commit geçmişini görüntüleyin.
git diff: Çalışma dizini ile staging area arasındaki farkları görün. git diff --staged: Staging area ile son commit arasındaki farkları görün.
Branching ve Merging
git branch <name>: Yeni branch oluşturun. git checkout <name> veya git switch <name>: Branch'e geçin.
git merge <branch>: Branch'i mevcut branch ile birleştirin. Fast-forward merge veya three-way merge kullanılır.
Merge conflict: Çakışan değişikliklerde manuel çözüm gerekir. Çakışan dosyaları düzenleyin, git add ile işaretleyin, git commit ile tamamlayın.
git branch -d <name>: Branch'i silin. git branch -D <name>: Merge edilmemiş branch'i zorla silin.
Remote Repository İşlemleri
git remote add origin <url>: Remote repository ekleyin. git remote -v: Remote'ları listele.
git push origin <branch>: Lokal değişiklikleri remote'a gönderin. git push -u origin main: Upstream branch ayarlayın.
git pull: Remote değişiklikleri çekin ve merge edin. git fetch: Remote değişiklikleri çekin (merge etmeden).
git push --force: Remote branch'i zorla güncelleyin (dikkatli kullanın). git push --force-with-lease: Daha güvenli force push.
Branching Stratejileri
Git Flow: main (production), develop (development), feature/* (yeni özellikler), release/* (sürüm hazırlığı), hotfix/* (acil düzeltmeler).
GitHub Flow: main branch + feature branch'ler. Her feature branch, pull request ile main'e merge edilir. Basit ve etkili.
Trunk-Based Development: Tek main branch, kısa ömürlü feature branch'ler (1-2 gün). Sürekli entegrasyon (CI/CD) ile birleştirilir.
Seçim kriterleri: Git Flow büyük projeler için, GitHub Flow küçük-orta projeler için, Trunk-Based Development CI/CD olgun ekipler için.
En İyi Uygulamalar
Commit mesajları: Imperative mood kullanın ('Add feature' not 'Added feature'). İlk satır 50 karakter, detay 72 karakter ile sınırlayın.
Atomic commits: Her commit tek bir değişikliği içermeli. Büyük değişiklikleri küçük commit'lere bölün.
Branch isimlendirme: feature/user-authentication, bugfix/login-error, hotfix/security-patch gibi açıklayıcı isimler kullanın.
.gitignore: Gereksiz dosyaları (node_modules, .env, build/) ignore edin. GitHub'ın gitignore şablonlarını kullanın.
Pull request: Kod incelemesi (code review) için pull request kullanın. Her değişiklik en az bir kişi tarafından incelenmeli.