Commit, branch ve merge — temel iş akışı
Commit, branch and merge — core workflow
Bu derste neler öğreneceksin
- Commit'in ne olduğunu ve staging area kavramını açıklamak
- Branch'lerin nasıl çalıştığını ve neden ucuz olduklarını anlamak
- Merge ve rebase arasındaki farkı sınav perspektifinden bilmek
- Merge conflict nedir ve nasıl çözülür?
Git’in üç temel kavramı — commit, branch ve merge — sınavın ilk domain’inde sıklıkla çıkar. Bu üçlüyü kavramak, GitHub’daki her workflow’u anlamanın anahtarıdır.
Commit nedir?
Commit, repo’nun anlık görüntüsüdür (snapshot). Her commit:
- Benzersiz bir SHA hash ile tanımlanır (örn.
a3f8c12) - Bir mesaj içerir (ne değiştiğini açıklar)
- Bir author ve timestamp taşır
- Önceki commit’e (parent) işaret eder
Staging area (index)
Git’te dosya değişiklikleri doğrudan commit’e gitmez — önce staging area’ya eklenir:
# Dosya değiştir
vim README.md
# Staging'e ekle
git add README.md
# Commit oluştur
git commit -m "README güncellemesi: kurulum talimatları eklendi"
Bu üç adım Git’in temel döngüsüdür: modify → stage → commit.
git status komutu hangi dosyaların staged, hangi dosyaların modified ama unstaged olduğunu gösterir.
Branch nedir?
Branch, commit geçmişinde bir pointer’dır. Yeni bir branch oluşturmak bir dosya kopyalamaz — sadece yeni bir işaretçi ekler. Bu yüzden Git branching’i “ucuz”dur.
git branch feature-login # Yeni branch oluştur
git switch feature-login # O branch'e geç
# veya kısaca:
git switch -c feature-login # Oluştur ve geç
main (veya eski adıyla master) branch genellikle production’daki kodu temsil eder. Yeni özellikler ayrı branch’lerde geliştirilir — bu, GitHub flow’un temelidir.
HEAD nedir?
HEAD, şu an hangi branch veya commit üzerinde çalıştığını gösteren özel bir pointer’dır. git log çıktısında (HEAD -> feature-login) şeklinde görünür.
Merge
Branch’teki değişiklikleri başka bir branch’e entegre etmek için merge kullanılır:
git switch main
git merge feature-login
Merge stratejileri
| Strateji | Açıklama | Ne zaman? |
|---|---|---|
| Fast-forward | Doğrusal geçmişte sadece pointer ilerler | Target branch ilerlememiş |
| 3-way merge | Ortak ata bulunur, yeni merge commit oluşur | Her iki branch de ilerlemiş |
| Squash merge | Feature branch commit’leri tek commit’e sıkıştırılır | Temiz geçmiş istendiğinde |
Merge conflict
İki branch aynı dosyanın aynı satırını farklı şekilde değiştirmiş ise merge conflict oluşur. Git dosyayı şu şekilde işaretler:
<<<<<<< HEAD
Bu main'deki içerik
=======
Bu feature-login'deki içerik
>>>>>>> feature-login
Çözüm: çakışan bölümü manuel düzenle, marker’ları sil, git add + git commit ile tamamla.
Rebase (kısaca)
git rebase bir branch’in commit geçmişini başka bir branch’in üstüne yeniden yazarak taşır. Sonuç: daha temiz, doğrusal geçmiş. Ancak git push --force gerektirir ve paylaşılan branch’lerde tehlikelidir.
GH-900 sınavı merge’e odaklanır; rebase hakkında çok derin sorular gelmez.
Özet tablo
| Kavram | Kısa tanım |
|---|---|
git add | Dosyayı staging’e ekle |
git commit | Staged değişiklikleri kaydet |
git branch | Branch listele/oluştur |
git switch | Branch değiştir |
git merge | Branch’i entegre et |
git log | Commit geçmişini göster |
git status | Repo durumunu göster |
git diff | Değişiklikleri göster |
Sınavda dikkat edilecek noktalar
- Commit her zaman yereldir —
git pushyapana kadar GitHub’a gitmez - Branch silmek commit’leri silmez — sadece pointer kaldırılır; commit’ler garbage collection’a kadar kalır
- Merge conflict otomatik çözülmez — geliştirici müdahalesi şart
- main vs. master: GitHub yeni repolar için
mainkullanır; sınav her ikisini de kullanabilir
Sırada ne var?
Bir sonraki derste GitHub flow’u — yani branching + PR merkezli geliştirme döngüsünü — ele alacağız.