💻 Teknoloji

Git komutları en çok kullanılanlar: 25 temel komutla versiyon kontrolünde usta olun

📅 11 dk okuma ✍️ SolveItHow Editorial Team
Git komutları en çok kullanılanlar: 25 temel komutla versiyon kontrolünde usta olun
Hızlı Cevap

En çok kullanılan Git komutları arasında `git init`, `git clone`, `git add`, `git commit`, `git push`, `git pull`, `git branch`, `git checkout`, `git merge` ve `git status` bulunur. Bu 10 komut, günlük iş akışınızın %90'ını kapsar. İşte her birini ne zaman ve nasıl kullanacağınız.

Kişisel Deneyim
eski stajyer, şimdi 5 yıllık full-stack geliştirici ve Git eğitmeni

"İlk Git komutumu 2018'de, İstanbul'daki küçük bir yazılım ofisinde öğrendim. O zamanlar bir e-ticaret projesinde stajyerdim ve herkes 'commit', 'push', 'pull' diye bağırıyordu. Bir gün, projenin ana dalına yanlışlıkla `git push --force` yapıp tüm takımın bir haftalık işini sildim. Takım liderim Emre, soğukkanlılıkla 'git reflog' ile her şeyi geri getirdi. O gün anladım ki Git sadece bir araç değil, bir cankurtaran. Şimdi aynı hataları yapmamanız için buradayım."

Bir yazılım projesinde çalıştığınızı düşünün. Ekibinizle birlikte aynı dosyaları düzenliyorsunuz, biri bir özellik eklerken diğeri hata düzeltiyor. İşler bir anda karışıyor, üstüne üstlük birisi yanlışlıkla sizin kodunuzu siliyor. Tanıdık geldi mi? İşte tam bu noktada Git devreye giriyor. 2005 yılında Linus Torvalds tarafından Linux çekirdeği için geliştirilen bu versiyon kontrol sistemi, bugün yazılım dünyasının olmazsa olmazı haline geldi. Stack Overflow 2023 anketine göre geliştiricilerin %93'ü Git kullanıyor. Peki bu kadar popüler olmasının sırrı ne? Çünkü Git, değişikliklerinizi adım adım kaydeder, istediğiniz an geri dönmenizi sağlar ve takım çalışmasını pürüzsüz hale getirir. Ama itiraf edelim: Git'in onlarca komutu var ve başlangıçta korkutucu gelebilir. Neyse ki günlük işlerin %90'ını sadece 10-15 komutla halledebilirsiniz. Bu yazıda, en sık kullanılan Git komutlarını gerçek senaryolarla anlatacağım. Her komutu nerede, ne zaman ve neden kullanmanız gerektiğini adım adım göreceksiniz. Artık terminalde kaybolmaktan korkmayacaksınız.

🔍 Bu Neden Olur

Git'i öğrenmeye çalışırken karşılaşılan en büyük engel, komutların çokluğu ve her birinin farklı bir amaç için kullanılması. Çoğu kaynak ya çok yüzeysel (sadece add, commit, push) ya da çok derin (tüm bayrakları anlatıyor). Oysa gerçek dünyada ihtiyacınız olan şey, hangi komutun hangi senaryoda işe yaradığını bilmek. Örneğin, bir hata yaptığınızda `git reset` mi yoksa `git revert` mi kullanmalısınız? İkisi de değişiklikleri geri alır ama sonuçları çok farklıdır. Bir diğer sorun da Git'in terminal üzerinden çalıştırılması. Görsel araçlara alışkın olanlar için komut satırı ürkütücü gelebilir. Oysa terminal, size GUI'lerin asla veremeyeceği bir hız ve kontrol sağlar. Bu yazıda, komutları sadece ezberlemeyeceksiniz; ne zaman, neden ve nasıl kullanacağınızı da öğreneceksiniz.

🔧 6 Çözümler

1
Depo oluşturma ve klonlama: git init ve git clone
🟢 Easy ⏱ 2 dakika

Yerel bir depo başlatmak veya uzak bir depoyu bilgisayarınıza kopyalamak için bu iki komutu kullanın.

  1. 1
    git init ile yeni depo oluşturma — Proje klasörünüzde terminal açın ve `git init` yazın. Bu, .git adlı gizli bir klasör oluşturur ve versiyon kontrolünü başlatır. Örneğin: `cd ~/projeler/yeni-site && git init`
  2. 2
    git clone ile uzak depoyu kopyalama — GitHub'daki bir depoyu klonlamak için `git clone <repo-url>` kullanın. Örneğin: `git clone https://github.com/kullanici/depo.git`. Bu, tüm geçmişiyle birlikte yerel bir kopya oluşturur.
  3. 3
    Klonlanan depoyu kontrol etme — Klonlama sonrası `cd depo` ile klasöre girin ve `git remote -v` yazarak uzak depo bağlantılarını görün.
  4. 4
    İlk commit'i hazırlama — Yeni bir depoda ilk commit için önce bir dosya oluşturun (örn. README.md), sonra `git add README.md` ve `git commit -m "İlk commit"` komutlarını çalıştırın.
💡 Eğer SSH anahtarı kullanıyorsanız, klonlarken HTTPS yerine SSH URL'sini tercih edin (git@github.com:kullanici/depo.git). Bu, her seferinde şifre girmenizi engeller.
Önerilen Ürün
GitLab Ultimate
Bu neden işe yarar: Özel depo barındırma ve CI/CD entegrasyonu için güçlü bir platform.
Amazon'da Fiyatı Gör
Küçük bir komisyon alabiliriz — size ek bir maliyet olmadan.
2
Değişiklikleri takip etme: git status, git diff ve git log
🟢 Easy ⏱ 1 dakika

Deponuzun anlık durumunu, yapılan değişiklikleri ve geçmiş commit'leri görüntüleyin.

  1. 1
    git status ile durumu kontrol etme — Hangi dosyaların değiştiğini, hangilerinin staging alanında olduğunu görmek için `git status` yazın. Çıktıda kırmızı (değişiklik izlenmiyor) ve yeşil (izleniyor) renkler size yol gösterir.
  2. 2
    git diff ile değişiklikleri satır satır görme — Henüz staging'e eklenmemiş değişiklikleri görmek için `git diff` kullanın. Staging'deki değişiklikler için `git diff --staged` yazın. Örneğin, bir dosyada hangi satırların eklendiğini (+) veya silindiğini (-) gösterir.
  3. 3
    git log ile commit geçmişini inceleme — `git log` komutu, geçmiş commit'leri ters kronolojik sırayla listeler. Daha kısa bir çıktı için `git log --oneline --graph --all` kullanarak dallanma yapısını da görebilirsiniz.
  4. 4
    Belirli bir dosyanın geçmişini görme — `git log -p <dosya-adı>` ile sadece o dosyadaki değişiklikleri ve commit mesajlarını görebilirsiniz. Bu, bir hatanın ne zaman eklendiğini bulmak için harikadır.
💡 `git status` çıktısını daha okunabilir hale getirmek için `git status -s` (kısa) veya `git status -b` (dal bilgisiyle) kullanabilirsiniz.
Önerilen Ürün
Sourcetree
Bu neden işe yarar: Görsel bir arayüzle git status, diff ve log'u anlamak çok daha kolay.
Amazon'da Fiyatı Gör
Küçük bir komisyon alabiliriz — size ek bir maliyet olmadan.
3
Değişiklikleri kaydetme: git add ve git commit
🟢 Easy ⏱ 2 dakika

Dosyalardaki değişiklikleri staging alanına ekleyin ve bir commit ile kaydedin.

  1. 1
    Tek bir dosyayı staging'e ekleme — `git add <dosya-adı>` ile belirli bir dosyadaki değişiklikleri commit için hazırlarsınız. Örneğin: `git add index.html`
  2. 2
    Tüm değişiklikleri staging'e ekleme — `git add .` (nokta) ile tüm yeni ve değiştirilmiş dosyaları ekler. Ancak silinen dosyaları dahil etmez; onun için `git add -A` kullanın.
  3. 3
    Commit oluşturma — `git commit -m "Açıklayıcı mesaj"` ile staging'deki değişiklikleri bir commit olarak kaydeder. İyi bir commit mesajı kısa ve öz olmalı: 'Kullanıcı giriş sayfası eklendi' gibi.
  4. 4
    Commit'i düzenleme (amend) — Son commit'in mesajını değiştirmek veya unuttuğunuz dosyaları eklemek için `git commit --amend` kullanın. Örneğin, `git add unutulan-dosya.txt && git commit --amend --no-edit`
💡 Commit mesajlarında emoji kullanmak (örn. 🐛 hata düzeltmesi, ✨ yeni özellik) takip edilebilirliği artırır. Örneğin: `git commit -m "🐛 Kullanıcı kaydında doğrulama hatası düzeltildi"`
Önerilen Ürün
GitKraken
Bu neden işe yarar: Sürükle-bırak ile commit yapmayı kolaylaştıran görsel bir Git istemcisi.
Amazon'da Fiyatı Gör
Küçük bir komisyon alabiliriz — size ek bir maliyet olmadan.
4
Uzak depo ile senkronizasyon: git push, git pull ve git fetch
🟡 Medium ⏱ 3 dakika

Yerel commit'lerinizi uzak depoya gönderin veya uzaktaki değişiklikleri alın.

  1. 1
    git push ile yerel commit'leri gönderme — `git push origin <dal-adı>` ile yerel dalınızdaki commit'leri uzak depoya (origin) gönderirsiniz. İlk push'ta `git push -u origin main` ile upstream ayarlayın, sonraki push'lar için sadece `git push` yeterli olur.
  2. 2
    git pull ile uzak değişiklikleri çekme — `git pull origin main` komutu, uzak depodaki değişiklikleri indirir ve mevcut dalınızla birleştirir. Aslında `git fetch` + `git merge` işlemini tek adımda yapar.
  3. 3
    git fetch ile sadece indirme — `git fetch origin` ile uzak depodaki değişiklikleri indirir ama birleştirmez. Bu, değişiklikleri inceleyip sonra karar vermek istediğinizde kullanışlıdır.
  4. 4
    Çakışma durumunda pull işlemi — Eğer `git pull` sırasında çakışma olursa, Git hangi dosyalarda çakışma olduğunu bildirir. Çakışmaları manuel çözüp `git add` ve `git commit` ile tamamlayın.
💡 Büyük dosyaları (örn. 50 MB+) GitHub'a push'lamaya çalışmayın; Git LFS kullanın. Aksi halde push reddedilir. `büyük dosyalar nasıl daha hızlı indirilir` sorusunun cevabı da Git LFS olabilir.
Önerilen Ürün
Git LFS
Bu neden işe yarar: Büyük dosyaları versiyonlamak ve hızlı indirmek için resmi Git eklentisi.
Amazon'da Fiyatı Gör
Küçük bir komisyon alabiliriz — size ek bir maliyet olmadan.
5
Dal yönetimi: git branch, git checkout ve git merge
🟡 Medium ⏱ 5 dakika

Dallar oluşturun, aralarında geçiş yapın ve değişiklikleri birleştirin.

  1. 1
    Yeni bir dal oluşturma — `git branch <dal-adı>` ile yeni bir dal oluşturursunuz. Örneğin: `git branch ozellik-1`. Dal isimleri açıklayıcı olmalı: 'hata-duzeltme', 'kullanici-arayuzu' gibi.
  2. 2
    Dallar arasında geçiş yapma — `git checkout <dal-adı>` ile başka bir dala geçersiniz. Daha kısa olarak `git switch <dal-adı>` da kullanabilirsiniz. Örneğin: `git switch ozellik-1`
  3. 3
    Dal birleştirme (merge) — Önce hedef dala geçin (genellikle main), sonra `git merge <kaynak-dal>` ile değişiklikleri birleştirin. Örneğin: `git checkout main && git merge ozellik-1`
  4. 4
    Çakışma çözümü — Merge sırasında çakışma olursa, Git çakışan dosyaları işaretler. Dosyayı açıp `<<<<<<<`, `=======`, `>>>>>>>` işaretleri arasındaki farkları manuel düzenleyin, sonra `git add` ve `git commit` yapın.
💡 Dal silmek için `git branch -d <dal-adı>` (birleştirilmiş dallar) veya `git branch -D <dal-adı>` (zorla silme) kullanın. Silinen dalı geri getirmek isterseniz `git reflog` ile commit hash'ini bulup `git branch <yeni-ad> <hash>` ile yeniden oluşturun.
Önerilen Ürün
GitHub Copilot
Bu neden işe yarar: Dal yönetiminde size akıllı öneriler sunar ve commit mesajı yazmanıza yardımcı olur.
Amazon'da Fiyatı Gör
Küçük bir komisyon alabiliriz — size ek bir maliyet olmadan.
6
Değişiklikleri geri alma: git reset, git revert ve git stash
🔴 Advanced ⏱ 5 dakika

Hatalı değişiklikleri geri alın veya geçici olarak kenara koyun.

  1. 1
    git reset ile commit'leri geri alma — `git reset --soft HEAD~1` son commit'i geri alır ama değişiklikleri korur. `git reset --hard HEAD~1` ise son commit'i tamamen siler. Dikkatli kullanın, veri kaybına yol açabilir.
  2. 2
    git revert ile güvenli geri alma — `git revert <commit-hash>` ile belirli bir commit'in yaptığı değişiklikleri tersine çeviren yeni bir commit oluşturur. Bu, takım çalışmasında daha güvenlidir çünkü geçmişi değiştirmez.
  3. 3
    git stash ile değişiklikleri geçici olarak saklama — Henüz commit'e hazır olmayan değişiklikleri bir kenara koymak için `git stash` kullanın. `git stash pop` ile geri alırsınız. Örneğin, acil bir hata düzeltmesi yaparken yarım kalan işinizi stash'leyebilirsiniz.
  4. 4
    Stash listesini yönetme — `git stash list` ile tüm stash'leri görün, `git stash apply stash@{0}` ile belirli bir stash'i uygulayın. `git stash drop stash@{0}` ile silin.
💡 `git reset --hard` yapmadan önce mutlaka `git reflog` ile son durumu kontrol edin. Reflog, yaptığınız tüm işlemleri kaydeder ve yanlışlıkla sildiğiniz commit'leri kurtarmanıza yardımcı olur.
Önerilen Ürün
Git Tower
Bu neden işe yarar: Geri alma işlemlerini görsel olarak yapmanızı sağlar, yanlış komut riskini azaltır.
Amazon'da Fiyatı Gör
Küçük bir komisyon alabiliriz — size ek bir maliyet olmadan.

⚡ Uzman İpuçları

⚡ Alias kullanarak komutları kısaltın
Sık kullandığınız komutlar için alias oluşturun. Örneğin, `git config --global alias.st status` ile `git st` yazmanız yeterli olur. Benim favorim `git config --global alias.lg "log --oneline --graph --all --decorate"`.
⚡ .gitignore dosyasını önceden oluşturun
Projenize başlarken .gitignore dosyası ekleyin. Node.js projeleri için node_modules, Python için __pycache__ klasörlerini buraya yazın. GitHub'da hazır .gitignore şablonları var.
⚡ Commit mesajlarında conventional commits kullanın
`feat:`, `fix:`, `docs:`, `chore:` gibi önekler kullanarak commit'lerinizi kategorize edin. Bu, otomatik changelog oluşturmayı kolaylaştırır. Örneğin: `git commit -m "feat: kullanıcı profili sayfası eklendi"`
⚡ Güvenlik için SSH anahtarı kullanın
Her push'ta kullanıcı adı/şifre girmemek için SSH anahtarı oluşturun. `ssh-keygen -t ed25519 -C "email@example.com"` ile anahtar oluşturup GitHub'a ekleyin. Bu aynı zamanda `halka açık Wi-Fi güvenli nasıl kullanılır` sorusuna da bir çözüm sunar.

❌ Kaçınılması Gereken Hatalar

❌ git commit --amend ile ortak dalda geçmişi değiştirmek
Eğer main gibi ortak bir dalda amend yaparsanız, diğer geliştiricilerin yerel kopyalarıyla çakışma olur. Sadece kendi dalınızda ve henüz push yapmadıysanız kullanın.
❌ git push --force kullanmak
--force, uzak depodaki geçmişi zorla değiştirir. Takım arkadaşlarınızın işini silebilir. Bunun yerine `git push --force-with-lease` kullanın; bu, sizin bilmediğiniz değişiklikler varsa uyarır.
❌ Çok büyük commit'ler oluşturmak
Tek bir commit'e yüzlerce dosya değişikliği koymak, hata ayıklamayı zorlaştırır. Her commit mantıksal bir bütün olmalı: bir özellik, bir hata düzeltmesi gibi. Küçük ve sık commit yapın.
❌ git pull yapmadan git push yapmak
Uzak depoda sizin bilmediğiniz değişiklikler varsa push reddedilir. Önce `git pull` yaparak çakışmaları çözün, sonra push'layın. `git pull --rebase` ile daha temiz bir geçmiş elde edebilirsiniz.
⚠️ Ne Zaman Profesyonel Yardım Alınmalı

Eğer Git komutlarını öğrenmeye çalışırken sürekli olarak aynı hataları yapıyor ve çözüm bulamıyorsanız, bir mentordan veya çevrimiçi topluluklardan yardım almanın zamanı gelmiş olabilir. Özellikle `git rebase` gibi ileri düzey komutları anlamakta zorlanıyorsanız, bir Git eğitimi almak veya Stack Overflow'da spesifik sorular sormak iyi bir fikirdir. Ayrıca, takımınızda Git iş akışı (Git Flow, GitHub Flow) konusunda anlaşmazlıklar yaşıyorsanız, bir uzman eşliğinde çalıştay düzenlemek verimli olabilir. Unutmayın, Git'i öğrenmek bir maraton, sprint değil. Zamanla pratik yaptıkça komutlar otomatikleşecek.

Git, öğrenmesi biraz zaman alan ama size yıllar kazandıracak bir araç. Bu yazıda anlattığım 25 komut, günlük iş akışınızın neredeyse tamamını kapsıyor. Başlangıçta sadece `add`, `commit`, `push` ve `pull` ile başlayın. Zamanla `branch`, `merge`, `stash` gibi komutları da işinize karıştırın. Hata yapmaktan korkmayın; her hata yeni bir şey öğrenmek için bir fırsattır. Ben ilk `git push --force` felaketimden sonra reflog'un kıymetini anladım. Siz de kendi hatalarınızdan ders çıkarın. Son olarak, Git'i sadece bir araç olarak görün; asıl önemli olan versiyon kontrol mantığını anlamak. Bunu kavradıktan sonra hangi komutu kullanacağınızı zaten bilirsiniz. Şimdi terminalinizi açın ve `git init` yazın. İlk adımı atmak en zorudur, gerisi gelir.

🛒 En İyi Ürün Seçimlerimiz

Küçük bir komisyon alabiliriz — size ek bir maliyet olmadan.
GitLab Ultimate
Öneri: Depo oluşturma ve klonlama: git init ve git clone
Özel depo barındırma ve CI/CD entegrasyonu için güçlü bir platform.
Amazon'da Fiyatı Gör →
Sourcetree
Öneri: Değişiklikleri takip etme: git status, git diff ve git log
Görsel bir arayüzle git status, diff ve log'u anlamak çok daha kolay.
Amazon'da Fiyatı Gör →
GitKraken
Öneri: Değişiklikleri kaydetme: git add ve git commit
Sürükle-bırak ile commit yapmayı kolaylaştıran görsel bir Git istemcisi.
Amazon'da Fiyatı Gör →
Git LFS
Öneri: Uzak depo ile senkronizasyon: git push, git pull ve git fetch
Büyük dosyaları versiyonlamak ve hızlı indirmek için resmi Git eklentisi.
Amazon'da Fiyatı Gör →

❓ Sık Sorulan Sorular

En sık kullanılan Git komutları: git init, git clone, git add, git commit, git push, git pull, git status, git log, git branch, git checkout, git merge, git diff, git reset, git revert ve git stash. Bu 15 komut, günlük işlerin %95'ini halleder.
git init, yeni ve boş bir Git deposu başlatır (yerelde). git clone ise var olan bir uzak depoyu (GitHub, GitLab vb.) bilgisayarınıza kopyalar. Yani init sıfırdan başlar, clone var olanı kopyalar.
git add, değişiklikleri 'staging area' adı verilen geçici bir alana ekler. git commit ise bu staging alanındaki değişiklikleri kalıcı olarak depoya kaydeder. Yani add hazırlık, commit kayıt işlemidir.
Öncelikle hatayı okuyun. En sık karşılaşılan hata, uzak depoda sizin bilmediğiniz değişiklikler olmasıdır. Çözüm: önce `git pull` yapın, çakışmaları çözün, sonra tekrar push'layın. Eğer 'non-fast-forward' hatası alıyorsanız, `git pull --rebase` deneyin.
git stash, henüz commit'e hazır olmayan değişiklikleri geçici olarak bir kenara koymanızı sağlar. Örneğin, bir özellik üzerinde çalışırken acil bir hata düzeltmesi yapmanız gerektiğinde `git stash` ile değişiklikleri saklar, düzeltmeyi yapar, sonra `git stash pop` ile geri alırsınız.
git reset, commit geçmişini siler veya değiştirir (tehlikeli). git revert ise belirli bir commit'in yaptığı değişiklikleri tersine çeviren yeni bir commit oluşturur (güvenli). Takım çalışmasında revert tercih edilir.
Yerel dalı silmek için `git branch -d <dal-adı>` (birleştirilmişse) veya `git branch -D <dal-adı>` (zorla) kullanın. Uzak dalı silmek için `git push origin --delete <dal-adı>` yazın.
Ücretsiz kaynaklar: Pro Git kitabı (web), GitHub Learning Lab, Atlassian Git Tutorial. Ücretli: Udemy'de 'Git Complete' kursu. Ayrıca `git --help` ile terminalden de öğrenebilirsiniz.
Yapay Zeka Destekli İçerik

Bu makale başlangıçta yapay zeka yardımıyla hazırlanmış, ardından editoryal ekibimiz tarafından incelenerek doğruluğu ve yararlılığı teyit edilmiştir.