🛠️ Git Nedir ve Nasıl Kullanılır? – İleri Seviye ve Uygulamalı Rehber
Bu rehber, Git’in temel kavramlarından ileri seviye senaryolara kadar geniş bir yelpazeyi pratik örneklerle ele almaktadır.
📌 İçindekiler
- Git Nedir?
- Kurulum ve İlk Ayarlar
- Proje Başlatma ve Klonlama
- Temel Git İş Akışı ve Örnek Senaryo
- Dosyaları Takip Dışı Bırakma (.gitignore)
- Branch (Dallanma) ve Çatışma (Conflict) Yönetimi
- Hataları Geri Alma ve Değişiklikleri Yönetme
- İleri Seviye Komutlar (Stash, Cherry-pick, Amend)
- Yardımcı Araçlar ve GitHub
1. 🧐 Git Nedir?
Git, dağıtık bir Versiyon Kontrol Sistemi (VCS)‘dir. Projenizdeki her değişikliği bir “snapshot” (anlık görüntü) olarak kaydeder.
- Snapshot Mantığı: Git, dosyaların sadece farkını değil, her commit’te o anki durumunun bir kopyasını (optimize edilmiş şekilde) tutar.
- Yerel Öncelik: İnternet olmasa dahi neredeyse tüm işlemleri (commit, branch, log) kendi bilgisayarınızda yapabilirsiniz.
2. 🚀 Kurulum ve İlk Ayarlar
Kimlik bilgilerinizi bir kez global olarak tanımlamanız yeterlidir:
# Global kimlik ayarları
git config --global user.name "Mustafa Ozkaya"
git config --global user.email "mustafa@ornek.com"
# Ayarları kontrol etmek için
git config --list
3. 📁 Proje Başlatma ve Klonlama
- Sıfırdan Başlama:
git initkomutuyla klasör içinde.gitadında gizli bir veritabanı oluşturulur. - Klonlama:
git clone https://github.com/kullanici/proje.gitkomutu projeyi tüm geçmişiyle birlikte indirir.
4. 🔄 Temel Git İş Akışı ve Örnek Senaryo
📝 Adım Adım Örnek Uygulama:
- Dosya Oluştur:
index.htmldosyasını oluşturun. - Durumu Kontrol Et:
bash git status # Çıktıda index.html "Untracked" (izlenmeyen) olarak görünür. - Dosyayı Hazırlık Alanına (Staging Area) Ekle:
bash git add index.html # Veya tümü için: git add . - Değişikliği Kaydet (Commit):
bash git commit -m "İlk ana sayfa yapısı oluşturuldu" - Geçmişi Görüntüle:
bash git log --oneline --graph --all
5. 🙈 Dosyaları Takip Dışı Bırakma (.gitignore)
Bazı dosyaların (şifreler, büyük veritabanları, derleme klasörleri) asla Git’e girmemesi gerekir. Bunun için proje kökünde .gitignore dosyası oluşturulur.
Örnek .gitignore içeriği:
# Node.js bağımlılıkları
node_modules/
# Log dosyaları
*.log
# Şifre dosyaları
config/secrets.json
.env
# İşletim sistemi dosyaları
.DS_Store
Thumbs.db
6. 🌿 Branch ve Çatışma (Conflict) Yönetimi
Dallanma (Branching)
Yeni bir özellik eklerken ana kodu bozmamak için:
git checkout -b ozellik-sepet # Yeni branch oluştur ve oraya geç
# ... kodlamanızı yapın ...
git add .
git commit -m "Sepet özelliği eklendi"
git checkout main # Ana koda geri dön
git merge ozellik-sepet # Özelliği ana kodla birleştir
⚔️ Çatışma (Merge Conflict) Çözümü
İki farklı branch’te aynı dosyanın aynı satırı değişirse Git “Conflict” verir. Dosyayı açtığınızda şöyle görünür:
<<<<<<< HEAD
<h1>Burası Main Branch</h1>
=======
<h1>Burası Sepet Branch</h1>
>>>>>>> ozellik-sepet
Çözüm: İlgili alanı elle düzenleyin, işaretçileri (<<<<, ====, >>>>) silin ve ardından:
git add .
git commit -m "Çakışma çözüldü"
7. ⏪ Hataları Geri Alma
| İhtiyaç | Komut |
|---|---|
Henüz add yapmadığınız değişikliği silmek | git checkout -- dosya.txt |
add yaptığınız dosyayı hazırlık alanından çıkarmak | git reset HEAD dosya.txt |
| Son commit’teki mesajı değiştirmek | git commit --amend -m "Yeni mesaj" |
| Commit’i tamamen geri almak (Kodları tutarak) | git reset --soft HEAD~1 |
| Commit’i ve kodları tamamen silmek | git reset --hard HEAD~1 |
| Hatalı bir commit’in tersini yeni bir commit olarak eklemek | git revert <commit_id> |
8. 🚀 İleri Seviye Komutlar
📦 Stashing (Yedekleme)
Üzerinde çalıştığınız iş bitmedi ama başka bir branch’e geçmeniz gerekiyor:
git stash # Çalışmalarını geçici hafızaya al (ortalık temizlenir)
git checkout main # Başka işini yap
git checkout ozellik
git stash pop # Kaldığın yerden devam et
🍒 Cherry-pick
Başka bir branch’teki sadece belirli bir commit’i mevcut branch’inize kopyalamak için:
git cherry-pick <commit_id>
🔍 Farkları Görme
git diff # Çalışma dizini ile staging arasındaki fark
git diff --cached # Staging ile son commit arasındaki fark
9. ☁️ Yardımcı Araçlar ve GitHub
Uzak Depo (Remote) İşlemleri
# Yerel depoyu GitHub'a bağlama
git remote add origin https://github.com/mustafaozkaya/proje.git
# İlk gönderim
git push -u origin main
Profesyonel Araç Tavsiyeleri
- GitLens (VS Code Eklentisi): Satır satır “Bunu kim, ne zaman yazdı?” sorusuna yanıt verir.
- LazyGit: Terminal içinde görsel ve hızlı bir Git yönetim arayüzü sunar.
- Conventional Commits:
feat: ...,fix: ...,docs: ...gibi standart mesaj formatlarını kullanmanızı öneririm.