Git Diff
Kısaca
Git diff, çalışma dosyaları, stage edilmiş değişiklikler veya commit'ler gibi kodunuzun iki sürümü arasındaki tam satır satır farkları gösteren Git komutudur.
git diff nedir?
git diff, 'tam olarak ne değişti?' sorusunu yanıtlar. Dosyalarınızın iki sürümünü karşılaştırır ve yalnızca farklı olan satırları yazdırır: - ile başlayan satırlar kaldırılmış, + ile başlayan satırlar eklenmiştir; her değişikliğin çevresindeki bağlam (context) adı verilen birkaç değişmemiş satır ise değişikliğin nerede olduğunu gösterir. Bu biçime unified diff denir ve bir pull request'i incelerken gördüğünüz görünümle aynıdır.
Neyin karşılaştırılacağı argümanlara bağlıdır. Düz git diff çalışma dizininizdeki henüz stage etmediğiniz düzenlemeleri, git diff --staged bir sonraki commit'in neyi içereceğini, git diff main feature ise iki branch'in son commit'lerini karşılaştırır. Ayrıca herhangi iki commit'i hash ile karşılaştırabilir, çıktıyı tek bir dosyayla sınırlamak için bir dosya yolu ekleyebilir ya da her dosyada kaç satırın değiştiğinin kısa özeti için --stat kullanabilirsiniz.
Diff, bir kelime işlemcideki değişiklik izleme görünümüne benzer; tüm belge yerine silinenleri ve eklenenleri gösterir. Geliştiriciler işlerini iki kez kontrol etmek için commit'ten önce git diff çalıştırır, kod inceleme araçları inceleyenlerin yeni olana odaklanabilmesi için diff'leri gösterir ve çıktı bir yama dosyası (patch) olarak kaydedilip başka bir yerde git apply ile uygulanabilir.
git diff sıklıkla git status ve git log ile karıştırılır. Status yalnızca hangi dosyaların değiştiğini listeler, log commit'leri listeler, diff ise değişikliklerin içindeki gerçek satırları gösterir. Yaygın bir sürpriz, git add sonrasında düz git diff'in hiçbir şey göstermemesidir: değişiklikler artık stage edilmiştir, bu yüzden onları görmek için git diff --staged gerekir; yepyeni izlenmeyen dosyalar ise düz git diff'te hiç görünmez.
Önemli noktalar
git diffsatır satır değişiklikleri gösterir; kaldırılan satırlar için-, eklenen satırlar için+kullanılır.- Düz
git diffstage edilmemiş değişiklikleri gösterir;git diff --stagedcommit edilecekleri gösterir. - Branch'leri, commit'leri ya da tek dosyaları karşılaştırabilirsiniz;
--stather dosyanın değişikliklerini özetler. git diff main...feature, bir branch'in ayrıldığından beri neyi değiştirdiğini, bir pull request'in yaptığı gibi gösterir.- Diff'ler kod incelemesinin ve başka yerde uygulanabilen yama dosyalarının temelidir.
Örnek
# Unstaged changes in your working directory
git diff
# Staged changes: what the next commit will contain
git diff --staged
# What a feature branch changed since it split from main
git diff main...feature/search --stat
# Sample output for one changed line:
# @@ -12,2 +12,2 @@ function total(items) {
# const sum = items.reduce((a, b) => a + b, 0);
# - return sum;
# + return sum + tax;Sık sorulan sorular
Git'te stage edilmiş değişiklikleri nasıl görürüm?
git diff --staged ya da eski eş anlamlısı git diff --cached çalıştırın. Düz git diff yalnızca henüz stage edilmemiş değişiklikleri gösterir.
Git'te iki branch nasıl karşılaştırılır?
Son commit'lerini doğrudan karşılaştırmak için git diff branch-a branch-b, branch-b'nin branch-a'dan ayrıldığından beri yalnızca neyi değiştirdiğini görmek için git diff branch-a...branch-b kullanın. Dosya başına özet için --stat, yalnızca dosya adlarını listelemek için --name-only ekleyin.
Bir diff'teki artı ve eksi işaretleri ne anlama gelir?
- ile başlayan satırlar eski sürümde bulunur ama yenisinde yoktur; + ile başlayan satırlar ise yalnızca yeni sürümde bulunur. Değiştirilmiş bir satır, bir silme ve ardından bir ekleme olarak görünür; @@ ile başlayan satırlar ise her değişiklik bloğunun nerede başladığını gösterir.
İlgili sayfalar
- Staging AreaSürüm Kontrolü, s. 37Git'teki staging area, dosyalarınız ile bir sonraki commit arasındaki bekleme alanıdır; o commit'e girecek değişiklikleri tam olarak buraya koyarsınız.
- CommitSürüm Kontrolü, s. 5Commit, Git'te projenin dosyalarının; benzersiz bir kimlik, yazar, zaman damgası ve değişikliği anlatan bir mesajla kaydedilmiş anlık görüntüsüdür.
- Code ReviewSürüm Kontrolü, s. 4Code review, kod değişikliklerinin birleştirilmeden önce başka geliştiricilerce incelenmesidir; hataları yakalar, kaliteyi artırır, bilgi paylaşımını sağlar.
- Pull RequestSürüm Kontrolü, s. 32Pull request, bir branch'teki değişiklikleri başka bir branch'e birleştirme önerisidir; kod birleşmeden önce ekibe inceleme, tartışma ve test alanı sunar.
- BranchSürüm Kontrolü, s. 2Git'te branch, bir özellik ya da düzeltme üzerinde, birleştirene kadar ana kodu etkilemeden çalışmanızı sağlayan bağımsız bir geliştirme hattıdır.
- Merge ConflictSürüm Kontrolü, s. 30Merge çakışması, iki branch bir dosyanın aynı satırlarını değiştirdiği için Git'in otomatik birleştiremediği, sonuca birinin karar vermesi gereken durumdur.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin