Kurs
Git, özellikle ekiplerin değişiklikleri izlemesine, verimli şekilde iş birliği yapmasına ve sorunları ayıklamasına yardımcı olan, kod değişikliklerini takip etmek için güçlü bir araçtır. Kod geçmişini yönetmek için çeşitli araçlar sunar; bunlardan en kullanışlı olanlardan biri git blame'dir. Bu komut, bir dosyadaki her satırın kaynağını izlemeye yardımcı olur; en son kimin, ne zaman değiştirdiğini gösterir.
Bu yazıda, bir projedeki değişiklikleri izlemek için git blame kullanımını inceleyeceğiz. Temel komutlarla başlayıp, belirli revizyonları yok sayma, geliştirme araçlarıyla entegrasyon ve en iyi uygulamalar gibi ileri düzey özelliklere doğru ilerleyeceğiz. Yazının sonunda, kod geçmişini etkili biçimde nasıl analiz edeceğinizi ve ekibiniz içinde iş birliğini nasıl geliştireceğinizi sağlam bir şekilde kavramış olacaksınız.
Git Blame nedir?
Kod değişikliklerini izlemek zor olabilir; özellikle birden fazla kişinin katkı yaptığı büyük projelerde. Bir dosyanın geçmişini anlamak, hata ayıklama, geçmiş kararları gözden geçirme ve kod kalitesini koruma açısından kritik önemdedir. Açık bir geçmiş olmadan, ekipler belirli bir değişikliğin neden yapıldığını ya da açıklama için kime başvurulacağını belirlemekte zorlanabilir.
İşte git blame burada vazgeçilmez hale gelir. Değişiklikleri satır düzeyinde saptamanıza olanak tanır ve her kod satırının yanında commit ayrıntılarını gösterir. Bu bilgilerle, ilgili commit'i hızla bulabilir, ilişkili mesajı kontrol edebilir ve değişikliğin daha geniş bağlamını görebilirsiniz. Bir hatayı gideriyor, değişiklikleri gözden geçiriyor ya da yalnızca bir dosyanın evrimini anlamaya çalışıyor olun, git blame bilinçli kararlar almak için gereken içgörüleri sağlar.

Neden git blame kullanılır?
Bir ekiple çalışırken veya bir sorunu ayıklarken, bir kod satırını en son kimin düzenlediğini bilmek faydalı olabilir. Bir hata yakın zamanda yapılan bir güncellemeden sonra ortaya çıkarsa, git blame sorunu doğuran tam değişikliği belirlemeye yardımcı olur. Ayrıca geliştiricilerin, belirli bir konuyla ilgili açıklamaya ihtiyaç duyduklarında doğru kişiyle iletişime geçmelerini sağlar.
Bu komut, değişikliklerin arkasındaki gerekçeyi anlamak için de kullanışlıdır. Kod yorumları ve commit mesajları bazen tüm düşünce sürecini yansıtmayabilir. Bir değişikliği belirli bir commit'e kadar takip ederek, geliştiriciler ilgili tartışmaları gözden geçirebilir ve daha geniş resmi görebilir.

Daha fazlasını, Git sürüm kontrolünün nasıl çalıştığını açıklayan ve veri bilimi projelerindeki kritik rolünü vurgulayan Git ve GitHub eğitimi adlı başlangıç rehberimizde öğrenebilirsiniz.
git blame'in temel kullanımı
git blame komutunun temel sözdizimi şöyledir:
git blame <file>
Bu komut, her satırı onu en son değiştiren commit ile, yazar, zaman damgası ve commit özeti (hash) dahil olmak üzere notlandırır. İşte bir örnek:
$ git blame example.py
derrickmwiti@Derricks-MacBook-Pro remixer % git blame src/components/ContentGenerator.vue
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 1) <template>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 2) <div class="content-generator">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 3) <div class="card h-100 border-0 shadow-sm">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 4) <div class="card-header bg-white border-bottom-0 pt-4">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 5) <div class="d-flex justify-content-between align-items-center mb-3">
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300 6) <div class="d-flex align-items-center gap-2">
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300 7) <h5 class="mb-0">Content Generator</h5>
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300 8) <span class="badge bg-secondary" v-if="openaiModel">{{ openaiModel }}</span>
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300 9) </div>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 10) </div>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 11)
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 12)
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 13) <nav>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 14) <div class="nav nav-tabs card-header-tabs gap-1" id="nav-tab" role="tablist">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 15) <button
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 16) v-for="platform in platforms"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 17) :key="platform"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 18) class="nav-link"
Her satır şunları içerir:
- Commit özeti (hash) (
^3b1aef2ve^8f2c4d3) - Yazarın adı (Derrick Mwiti)
- Son değişikliğin zaman damgası
- Gerçek kod satırı
Git Blame'in Pratik Kullanımları
Artık git blame'in temel sözdizimini anladığınıza göre, bunu günlük geliştirme senaryolarında nasıl uygulayabileceğinize bakalım.
Belirli bir satırın yazarını bulma
Bir dosya büyükse ve yalnızca belirli bir kısmı incelemeniz gerekiyorsa, bir satır aralığı belirtin:
derrickmwiti@Derricks-MacBook-Pro remixer % git blame -L 10,20 src/components/ContentGenerator.vue
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 10) </div>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 11)
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 12)
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 13) <nav>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 14) <div class="nav nav-tabs card-header-tabs gap-1" id="nav-tab" role="tablist">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 15) <button
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 16) v-for="platform in platforms"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 17) :key="platform"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 18) class="nav-link"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 19) :class="{ active: activeTab === platform }"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 20) :id="nav-${platform}-tab"
Bu, 10 ile 20. satırlara odaklanarak ilgili değişiklikleri bulmayı kolaylaştırır.
git show ile değişiklikleri anlamak
git blame her satırdaki son değişikliği vurgularken, bu commit'te tam olarak neyin değiştiğini açıklamaz. Daha fazla ayrıntı görmek için git show <commit-hash> komutunu kullanın:
derrickmwiti@Derricks-MacBook-Pro remixer % git show 28203e0
commit 28203e0f7cbe92c6baf6897a54686e87d16c9cda
Author: Derrick Mwiti <mwitiderrick@gmail.com>
Date: Mon Mar 10 17:48:31 2025 +0300
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..5a5809d
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,9 @@
+[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}]
+charset = utf-8
+indent_size = 2
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+end_of_line = lf
+max_line_length = 100
diff --git a/.env b/.env
:
<commit-hash> değerini git blame çıktısından aldığınız gerçek commit ID'siyle değiştirmek, tam commit mesajını ve kod farkını (diff) ortaya çıkarır; bu da değişikliğin arkasındaki nedeni anlamaya yardımcı olur.
Bunu daha fazla keşfetmek için, temel karşılaştırmalardan ileri düzey tekniklere kadar kod değişikliklerini etkili biçimde izlemek üzere git diff kullanımını öğreten Git Diff eğitimimize göz atın.
Git Blame'in İleri Düzey Özellikleri
İşte Git blame'i iş akışınızda kullanabileceğiniz daha kapsamlı bazı yollar:
Boşluk (whitespace) değişikliklerini yok sayma
Girintilemenin düzeltilmesi gibi bazı biçimlendirme değişiklikleri mantığı etkilemez. Bunları filtrelemek için git blame -w <file> kullanın:
derrickmwiti@Derricks-MacBook-Pro remixer % git blame -w src/components/ContentGenerator.vue
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 1) <template>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 2) <div class="content-generator">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 3) <div class="card h-100 border-0 shadow-sm">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 4) <div class="card-header bg-white border-bottom-0
Belirli revizyonları yok sayma
Bazı commit'ler (toplu yeniden biçimlendirmeler gibi) blame geçmişini kalabalıklaştırıyorsa, git blame --ignore-rev <commit-hash> <file> ile yok sayılabilir:
derrickmwiti@Derricks-MacBook-Pro remixer % git blame --ignore-rev 28203e0 src/components/ContentGenerator.vue
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 1) <template>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 2) <div class="content-generator">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 3) <div class="card h-100 border-0 shadow-sm">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 4) <div class="card-header bg-white border-bottom-0 pt-4">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 5) <div class="d-flex justify-content-between align-items-center mb-3">
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300 6) <div class="d-flex align-items-center gap-2">
Birden çok commit'i tutarlı şekilde yok saymak için bunları bir dosyada listeleyip --ignore-revs-file seçeneğiyle referans verebilirsiniz. Bu, ilgisiz değişiklikleri hariç tutarak blame geçmişini temiz tutmaya yardımcı olur.
Depo kök dizininizde .git-blame-ignore-revs adlı bir dosya oluşturun. Yok sayılacak commit özetlerini listeleyin, isteğe bağlı olarak açıklayıcı yorumlar ekleyin:
# Commit introducing code formatting changes
a926bba49c89a5b882cd298be3af2570b1e6252c
Belirtilen revizyonları yok saymak için aşağıdaki komutu çalıştırın:
git blame --ignore-revs-file .git-blame-ignore-revs filename
Git'e varsayılan olarak yok sayma dosyanızı kullanmasını söylemek için şu komutu çalıştırın:
git config blame.ignoreRevsFile .git-blame-ignore-revs
İsimler yerine yazar e-postalarını görüntüleme
Yazarın adı yerine e-posta adresini göstermek için:
derrickmwiti@Derricks-MacBook-Pro remixer % git blame --show-email src/components/PostsManager.vue
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300 1) <template>
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300 2) <div class="posts-manager">
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300 3) <h3>Saved Posts</h3>
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300 4)
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300 5) <div v-if="loading" class="text-center my-4">
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300 6) <div class="spinner-border text-primary" role="status">
Bu, belirli bir değişiklikten sorumlu kişiyle iletişime geçmek için yararlı olabilir.
Tam commit özetlerini görüntüleme
Varsayılan olarak git blame kısa commit özetlerini gösterir. Tam özetleri görmek için şunu çalıştırın:
derrickmwiti@Derricks-MacBook-Pro remixer % git blame --abbrev=40 src/components/PostsManager.vue
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300 1) <template>
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300 2) <div class="posts-manager">
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300 3) <h3>Saved Posts</h3>
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300 4)
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300 5) <div v-if="loading" class="text-center my-4">
--abbrev=<n> seçeneğini kullanarak Git blame kısaltmalarının uzunluğunu ayarlayabilirsiniz.
Visual Studio Code'da git blame kullanma
Visual Studio Code kullanan geliştiriciler için Git Blame uzantısı, git blame için yerleşik destek sunar.

Bu uzantı, kullanıcıların şunları yapmasına olanak tanır:
- Satır içi blame açıklamalarını görüntülemek.
- Satırların üzerine gelerek commit ayrıntılarını görmek.
- Tam dosya ve satır geçmişine erişmek.
Git Blame En İyi Uygulamaları
.git-blame-ignore-revs dosyasını sürdürmek, biçimlendirme commit'lerinin blame geçmişini kalabalıklaştırmasını engeller. Bir ekipte çalışırken, herkesin revizyonları yok sayma konusunda aynı kuralları takip etmesi yardımcı olur.
git blame kullanırken, amaç her zaman değişikliklerin arkasındaki mantığı anlamak olmalı; suçlu aramak değil. Bu, öğrenmeyi ve iş birliğini geliştirmeye yönelik bir araçtır; geliştiricilerin birlikte daha verimli çalışmasına yardımcı olur.

Sonuç
Bu yazıda, git blame komutunun geliştiricilerin kodlarındaki değişiklikleri nasıl takip etmelerine yardımcı olabileceğini ele aldık. Temel kullanımdan ileri düzey özelliklere kadar, bu komutun bir dosyayı kimin ve ne zaman değiştirdiğine dair netlik sağlama biçimini inceledik.
Bu komutu, git show gibi diğer Git araçlarıyla entegre ederek ve yok sayılan revizyonları yapılandırarak optimize edebilirsiniz. Bir sorunu ayıklıyor, değişiklikleri inceliyor ya da yalnızca bir dosyanın geçmişini anlıyorsanız, git blame kod bakımı ve iş birliğini geliştiren değerli içgörüler sunar.
git blame gibi araçlarda ustalaşmak kod tabanlarında güvenle gezinmenize, daha etkili iş birliği yapmanıza ve daha temiz proje geçmişleri tutmanıza yardımcı olur. Mesele yalnızca bir satırı kimin değiştirdiğini bulmak değil—neden değiştiğini anlamak ve bu içgörüyle daha iyi yazılım geliştirmektir. Git ekosistemine daha derin dalmak için kapsamlı Git kursumuza göz atın ya da orta düzey kullanıcılar için Git kursumuza dalın.
Git Blame SSS
git blame'de boşluk (whitespace) değişikliklerini nasıl yok sayabilirim?
Girintileme veya boşluk ayarlamaları gibi yalnızca boşluk içeren değişiklikleri yok saymak için -w seçeneğini kullanabilirsiniz.
git blame'de belirli bir değişikliğin commit ayrıntılarını nasıl bulurum?
git blame ile bir commit özetini belirledikten sonra, yapılan değişiklikler de dahil olmak üzere commit ayrıntılarını görmek için git show komutunu kullanın.
git blame sonuçlarından belirli commit'leri nasıl hariç tutabilirim?
Belirli commit'leri (ör. kod biçimlendirme değişiklikleri) yok saymak istiyorsanız şunu kullanın:
git blame --ignore-rev <commit-hash> <file>
Birden çok commit için, bunları bir .git-blame-ignore-revs dosyasında saklayın ve şunu çalıştırın:
git blame --ignore-revs-file .git-blame-ignore-revs <file>Visual Studio Code'da git blame kullanmanın bir yolu var mı?
Evet, VS Code'daki Git Blame uzantısı satır içi blame açıklamaları, commit geçmişi ve ayrıntılı içgörüler sağlar. Ayarları üzerinden blame açıklamalarını etkinleştirebilir veya özelleştirebilirsiniz.
