🛠️ 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

  1. Git Nedir?
  2. Kurulum ve İlk Ayarlar
  3. Proje Başlatma ve Klonlama
  4. Temel Git İş Akışı ve Örnek Senaryo
  5. Dosyaları Takip Dışı Bırakma (.gitignore)
  6. Branch (Dallanma) ve Çatışma (Conflict) Yönetimi
  7. Hataları Geri Alma ve Değişiklikleri Yönetme
  8. İleri Seviye Komutlar (Stash, Cherry-pick, Amend)
  9. 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 init komutuyla klasör içinde .git adında gizli bir veritabanı oluşturulur.
  • Klonlama: git clone https://github.com/kullanici/proje.git komutu projeyi tüm geçmişiyle birlikte indirir.

4. 🔄 Temel Git İş Akışı ve Örnek Senaryo

📝 Adım Adım Örnek Uygulama:

  1. Dosya Oluştur: index.html dosyasını oluşturun.
  2. Durumu Kontrol Et:
    bash git status # Çıktıda index.html "Untracked" (izlenmeyen) olarak görünür.
  3. Dosyayı Hazırlık Alanına (Staging Area) Ekle:
    bash git add index.html # Veya tümü için: git add .
  4. Değişikliği Kaydet (Commit):
    bash git commit -m "İlk ana sayfa yapısı oluşturuldu"
  5. 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 silmekgit checkout -- dosya.txt
add yaptığınız dosyayı hazırlık alanından çıkarmakgit reset HEAD dosya.txt
Son commit’teki mesajı değiştirmekgit commit --amend -m "Yeni mesaj"
Commit’i tamamen geri almak (Kodları tutarak)git reset --soft HEAD~1
Commit’i ve kodları tamamen silmekgit reset --hard HEAD~1
Hatalı bir commit’in tersini yeni bir commit olarak eklemekgit 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.