Modül 1 · Git ve GitHub temelleri · ⏱ 15 dakika

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

StratejiAçıklamaNe zaman?
Fast-forwardDoğrusal geçmişte sadece pointer ilerlerTarget branch ilerlememiş
3-way mergeOrtak ata bulunur, yeni merge commit oluşurHer iki branch de ilerlemiş
Squash mergeFeature branch commit’leri tek commit’e sıkıştırılırTemiz 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

KavramKısa tanım
git addDosyayı staging’e ekle
git commitStaged değişiklikleri kaydet
git branchBranch listele/oluştur
git switchBranch değiştir
git mergeBranch’i entegre et
git logCommit geçmişini göster
git statusRepo durumunu göster
git diffDeğişiklikleri göster

Sınavda dikkat edilecek noktalar

  • Commit her zaman yereldirgit push yapana 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 main kullanı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.