aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Araçlar & DevOps

Git Temelleri: commit, branch, merge

Git temelleri, modern yazılım geliştirmenin en önemli becerilerinden biridir; çünkü Git, kodunuzun her değişikliğini kayıt altına alan dağıtık bir versiyon kontrol sistemidir. İster tek başınıza çalışın ister bir ekiple, Git size "geri alabilme", "kim ne zaman neyi değiştirdi" ve "aynı dosya üzerinde paralel çalışma" gücü verir. Bu yazıda depo, staging area, commit ve branch kavramlarını net biçimde açıklayacak ve her adımı gerçek komutlarla göstereceğiz.

Temel kavramlar: depo, staging area, commit

Git temelleri öğrenirken önce sözlüğü oturtmak gerekir. Birbirine karışan üç kavram şunlardır:

  • Depo (repository): Projenizin tüm geçmişini saklayan, gizli .git klasöründe tutulan veritabanıdır.
  • Çalışma dizini (working directory): O an düzenlediğiniz gerçek dosyalar.
  • Staging area (hazırlık alanı / index): Bir sonraki commit'e dahil etmek istediğiniz değişiklikleri seçtiğiniz ara katman.
  • Commit: Staging area'daki değişikliklerin, bir mesaj ve benzersiz bir kimlik (hash) ile kalıcı olarak kaydedilmiş anlık görüntüsüdür.

Akış şudur: dosyayı düzenlersiniz → git add ile staging area'ya alırsınız → git commit ile depoya yazarsınız.

Yeni bir depo başlatmak ve ilk commit

Yeni bir projeye başlarken klasörün içinde Git'i başlatırsınız. İlk işiniz kimliğinizi tanımlamak ve depoyu oluşturmaktır:

git config --global user.name "Adınız Soyadınız"
git config --global user.email "siz@ornek.com"

mkdir projem
cd projem
git init

git init komutu, klasörde boş bir .git deposu oluşturur. Şimdi bir dosya ekleyip durumu kontrol edelim:

git status
git add index.html
git add .
git commit -m "İlk commit: proje iskeleti"

git status hangi dosyaların değiştiğini, hangilerinin staging area'da olduğunu gösterir ve en sık kullanacağınız komuttur. git add . tüm değişiklikleri sahneye alır; git commit -m ise tek satırlık bir mesajla kaydı tamamlar. Anlamlı, kısa ve emir kipinde mesajlar yazın (örn. "Giriş formu doğrulaması eklendi").

Geçmişi okumak: git log ve git status

Yaptığınız commit'leri görmek için git log kullanılır:

git log
git log --oneline --graph --decorate

--oneline her commit'i tek satıra indirir, --graph branch yapısını görsel olarak çizer. Çıktıdaki her satırın başındaki kısa karakter dizisi, o commit'in benzersiz kimliğidir (hash) ve onunla istediğiniz ana geri dönebilirsiniz. git status ise her zaman "şu an neredeyim" sorusunun yanıtıdır.

Branch ve merge: paralel çalışmanın temeli

Bir branch (dal), ana koddan ayrılıp bağımsız çalışmanızı sağlayan hareketli bir işaretçidir. Yeni bir özelliği denerken ana dalı (genelde main) bozmadan ayrı bir dalda çalışırsınız:

git branch ozellik-login
git switch ozellik-login

# Eski Git sürümlerinde aynı iş:
git checkout -b ozellik-login

Burada git switch modern ve okunması kolay komuttur; git checkout -b ise hem dalı oluşturup hem geçişi tek adımda yapar. Dalda birkaç commit attıktan sonra işiniz biterse, değişiklikleri ana dala merge (birleştirme) ile taşırsınız:

git switch main
git merge ozellik-login

# Birleşen dalı temizleyin:
git branch -d ozellik-login

Eğer iki dal aynı dosyanın aynı satırlarını farklı şekilde değiştirmişse Git bir çakışma (conflict) bildirir. Bu durumda dosyayı açar, <<<<<<< ve >>>>>>> işaretleri arasındaki bölümleri elle düzeltir, ardından git add + git commit ile birleştirmeyi tamamlarsınız.

Uzak depolarla çalışmak: clone, pull, push

Git dağıtık olduğundan, kod genellikle GitHub veya GitLab gibi bir uzak depoda (remote) paylaşılır. Mevcut bir projeyi indirmek için:

git clone https://github.com/kullanici/proje.git

Kendi yerel deponuzu var olan bir remote'a bağlamak ve göndermek için:

git remote add origin https://github.com/kullanici/proje.git
git push -u origin main

Günlük döngü basittir: takım arkadaşlarınızın değişikliklerini almak için git pull, kendi commit'lerinizi yüklemek için git push kullanırsınız:

git pull
git push

İlk git push -u origin main komutundaki -u, yerel dalı uzak dala bağlar; sonraki seferlerde sadece git push yeterli olur.

.gitignore ile gereksiz dosyaları dışlamak

Bağımlılık klasörleri, derleme çıktıları ve gizli anahtarlar depoya girmemelidir. Proje kökünde bir .gitignore dosyası oluşturup hangi dosyaların yok sayılacağını belirtirsiniz:

node_modules/
vendor/
.env
*.log
/dist
.DS_Store

Önemli bir kural: .gitignore yalnızca henüz takip edilmeyen dosyalar için çalışır. Bir dosyayı yanlışlıkla zaten commit'lediyseniz, önce git rm --cached dosya ile takipten çıkarmanız gerekir.

Sık Sorulan Sorular

git add ve git commit arasındaki fark nedir?

git add değişiklikleri staging area'ya alır, yani "bunları kaydetmek istiyorum" der; git commit ise sahnelenen bu değişiklikleri bir mesajla kalıcı olarak depoya yazar. Add olmadan commit boş çalışır.

git checkout ve git switch arasında fark var mı?

Her ikisi de dal değiştirebilir. git switch yalnızca dal işlemleri için tasarlanmış, daha yeni ve net bir komuttur; git checkout ise hem dal değiştirir hem dosya geri yükler, bu yüzden daha karmaşıktır. Yeni başlayanlara git switch önerilir.

Son commit mesajımı nasıl düzeltirim?

Henüz push etmediyseniz git commit --amend -m "Yeni mesaj" komutuyla son commit'i yeniden yazabilirsiniz. Push ettikten sonra geçmişi değiştirmek ekip arkadaşlarınızı etkiler, bu yüzden dikkatli olun.

Projeniz için sağlam bir Git ve dağıtım (deployment) akışı mı kurmak istiyorsunuz? Versiyon kontrolü, kod kalitesi ve otomasyon konularında yardıma ihtiyacınız varsa benimle iletişime geçin — birlikte projenize uygun bir iş akışı tasarlayalım.

Devamı için