Git Diff Komutu: Taahhütler Arasındaki Değişiklikleri İnceleme Kılavuzu
Git deposundaki her değişiklik, hazırlama (staging) veya kalıcı hale getirme (commit) öncesinde incelenebilir. git diff komutu, çalışma dizininiz, hazırlık alanınız ve herhangi iki commit veya dal arasındaki eklenen, kaldırılan veya değiştirilen tam satırları gösterir.
Bu rehber, git diff komutunun iş akışınızın her aşamasında değişiklikleri gözden geçirmek için nasıl kullanılacağını açıklamaktadır.
Zorluk Seviyesi: Intermediate
Temel Kullanım: Hazırlanmamış Değişiklikler
Çalışma dizininiz ile hazırlık alanı arasındaki farkları (yani henüz git add ile eklenmemiş değişiklikleri) görmek için argümansız git diff komutunu çalıştırın:
$ git diff
Çıktıda, + ile başlayan satırlar eklenenleri, - ile başlayan satırlar ise kaldırılanları temsil eder. Önek içermeyen satırlar ise bağlam (context) satırlarıdır.
Eğer çıktı boşsa, tüm değişiklikleriniz zaten hazırlanmış demektir veya hiç değişiklik yapılmamıştır.
Hazırlanmış Değişiklikleri İnceleme (Staged Changes)
Commit edilmeye hazır olan, yani git add ile hazırlık alanına eklediğiniz değişiklikleri görmek için --staged (veya eş anlamlısı olan --cached) bayrağını kullanın:
$ git diff --staged
Bu komut, hazırlık alanını en son commit (HEAD) ile karşılaştırır ve bir sonraki commit'te tam olarak nelerin yer alacağını gösterir.
$ git diff --cached
Commit'leri Karşılaştırma
İki belirli commit arasındaki farkları doğrudan incelemek için commit hash'lerini (veya referanslarını) kullanabilirsiniz:
$ git diff abc1234 def5678
Bir Commit'in Ebeveynini Karşılaştırma
Bir commit'i hemen önceki haliyle karşılaştırmak için ^ sonekini kullanın. HEAD en son commit'i ifade ederken, HEAD^ bir önceki commit'i ifade eder:
$ git diff HEAD^ HEAD
Son üç commit'teki değişiklikleri görmek için HEAD~3 gibi notasyonları da kullanabilirsiniz.
Dalları Karşılaştırma
İki dalın uç noktaları arasındaki tüm farkları görmek için aynı sözdizimini kullanın:
$ git diff main feature-branch
Ortak Atadan İtibaren Farkları Görme (Üç Nokta Notasyonu)
Bir dalın, diğer dala kıyasla ne eklediğini (yani ana daldaki değişiklikleri hariç tutarak) görmek için üç nokta (...) notasyonunu kullanmak en yaygın senaryodur (örneğin, bir Pull Request incelemesi yaparken):
$ git diff main...feature-branch
Bu, her iki dalın ortak atası bulunur ve fark, bu atadan feature-branch'in ucuna kadar olan değişiklikler üzerinden hesaplanır.
Belirli Bir Dosyayı Karşılaştırma
Farkları yalnızca tek bir dosyayla sınırlamak için, -- ayırıcısından sonra dosya yolunu belirtin:
$ git diff HEAD~3 HEAD -- src/app/config.py
--ayırıcısı, Git'e sonraki argümanın bir dal adı değil, bir dosya yolu olduğunu bildirir.
Özet İstatistikleri ile Görüntüleme
Tam satır detayları yerine, hangi dosyaların değiştiğini ve kaç satır eklendiğini/çıkarıldığını görmek için --stat bayrağını kullanın:
$ git diff --staged --stat
Kelime Düzeyinde Farklar
Satır yerine, yalnızca satır içindeki değişen kelimeleri vurgulamak istiyorsanız --word-diff kullanın. Kaldırılan kelimeler [-köşeli parantez-] içinde, eklenenler ise {+süslü parantez+} içinde gösterilir:
$ git diff --word-diff
Hızlı Referans Tablosu
| Komut | Açıklama |
|---|---|
git diff |
Hazırlanmamış çalışma dizini değişiklikleri |
git diff --staged |
Commit edilmeye hazır hazırlanmış değişiklikler |
git diff main...feature |
feature dalının ana daldan bu yana getirdiği değişiklikler |
git diff --stat |
Değişen dosyaların ve satır sayılarının özeti |
git diff -w |
Tüm boşluk (whitespace) değişikliklerini yoksay |
SSS (Sıkça Sorulan Sorular)
git diff ile git diff --staged arasındaki fark nedir?
git diff, çalışma dizininizdeki henüz hazırlanmamış değişiklikleri gösterir. git diff --staged ise git add ile hazırlanmış ve commit'e hazır olan değişiklikleri gösterir. Her ikisini birden görmek için git diff HEAD kullanılır.
git diff main...feature neden git diff main feature'dan farklıdır?
Üç nokta (...) notasyonu, iki dalın ortak atasına göre farkı hesaplar. Bu, ana daldaki son değişiklikleri göz ardı ederek yalnızca feature dalının getirdiği yeni işi izole etmek için kritik öneme sahiptir.



