Git 2.56 Yenilikleri: git add --resolved, Birleşmiş Dalları Toplu Silme ve 70 Kata Varan Hızlanma

Alesta WEB

Git 2.56 Yenilikleri: git add --resolved, Birleşmiş Dalları Toplu Silme ve 70 Kata Varan Hızlanma

Kısa cevap: Git 2.56, 104 katılımcının (39'u yeni) katkısıyla Eylül 2026'nın sonunda yayımlandı. Günlük kullanımı en çok etkileyen yenilikler: çakışma işaretleri kalmış dosyayı sahneye almayı reddeden git add --resolved, uzak dalda birleşmiş yerel dalları toplu silen git branch --delete-merged, ref'leri güvenli yöneten git refs alt komutları ve deneysel git history drop. Büyük depolarda merge-base aramaları 20–70 kat hızlandı; Chromium'da bir git diff sekiz dakikadan 0,07 saniyeye indi (GitHub Blog).

git add --resolved: çakışma işareti kalmışsa sahneye almaz

Birleştirme çakışması çözerken en sık yapılan hata, bir dosyada <<<<<<< işaretini unutup git add . ile her şeyi sahneye almak. Yeni seçenek bu iki sorunu birden çözüyor:

  • Yalnızca o an birleştirilmemiş (unmerged) yolları sahneye alıyor; çalışma dizinindeki ilgisiz değişikliklere dokunmuyor.
  • Sahneye almadan önce bu dosyalarda kalmış çakışma işareti arıyor. Bulursa raporluyor ve dizini (index) hiç değiştirmiyor: ya hepsi sahneye alınıyor ya hiçbiri.
SQL
git merge feature/odeme
# ... çakışmaları düzenle ...
git add --resolved            # tüm çözülen dosyalar
git add --resolved src/       # yalnızca src altındakiler
git commit

Silinmiş dosyalar ve ikili (binary) çakışmalarda metin işareti olmadığı için normal biçimde sahneye alınıyor. -u ve -A ile birlikte kullanılamıyor. Çakışma çözümünün temelleri için Git merge conflict rehberimize bakabilirsiniz.

Kod düzenleyicide Git dal ve commit geçmişi grafiği (Git branch and commit history graph in an editor)
Yeni git branch --delete-merged seçeneği, uzak dalda birleşmiş yerel dalları tek komutla temizliyor. Fotoğraf: Yancy Min / Unsplash

git branch --delete-merged: birleşmiş dalları toplu temizleme

Uzun yaşayan projelerde yerel dal listesi zamanla onlarca eski dalla doluyor. Yeni seçenek, ucu takip ettiği uzak dalda zaten bulunan yerel dalları siliyor:

Bash
# Önce ne silineceğini gör
git branch --delete-merged 'origin/*' 'topic-*' --dry-run

# Sonra uygula
git branch --delete-merged 'origin/*' 'topic-*'

# Bir dalı toplu temizlikten koru
git config branch.release-2026.deleteMerged false

İlk desen uzak dalları, ikinci desen yerel dal adlarını sınırlıyor. Bir çalışma ağacında (worktree) açık olan, uzak dalı kaybolmuş veya push ayarı belirsiz dallar atlanıyor. Daha önce bunun için git branch --merged | grep -v ... | xargs git branch -d gibi kırılgan zincirler yazılıyordu.

git refs ve git history drop

git refs alt komutları, ref'leri doğrudan ve güvenli yönetmeyi sağlıyor. İsteğe bağlı "eski değer" parametresi karşılaştır-ve-değiştir (compare-and-swap) koruması veriyor: ref beklediğiniz değerde değilse işlem yapılmıyor. Betiklerde ve CI'da yarış durumlarını önlemek için kullanışlı.

Bash
git refs create refs/heads/topic <yeni-deger>
git refs update refs/heads/topic <yeni-deger> <eski-deger>
git refs delete refs/heads/topic <eski-deger>
git refs rename refs/heads/eski refs/heads/yeni

git refs rename ref'i ve reflog'unu taşıyor ama git branch -m'den farklı olarak dal yapılandırmasını güncellemiyor.

git history drop <commit> (deneysel) bir commit'i geçmişten çıkarıp sonraki commit'leri onun ebeveyninin üzerine yeniden uyguluyor. İnteraktif rebase açmadan tek bir commit'i silmenin yolu. Çakışma çıkacaksa ya da yerel değişikliklerin üzerine yazılacaksa iptal ediliyor; birleştirme commit'i içeren geçmişlerde çalışmıyor. Bu komut 2.54'teki reword/split ve 2.55'teki fixup ile başlayan git history ailesinin devamı.

Bisect, replay ve yazım önerileri

  • git bisect run --reset-when-found: Hatalı commit bulununca bisect durumunu kendisi temizliyor. Varsayılan original başlangıçtaki commit'e dönüyor, found ise suçlu commit'i açık bırakıyor.
  • git replay --linearize (deneysel): Birleştirme commit'lerini atarak commit'leri tek çizgide yeniden uyguluyor; çalışma ağacını kullanmadığı için sunucu tarafı işlemlerde hızlı.
  • Yazım önerileri: git push origin/main yazınca git push origin main öneriliyor.
  • git log --graph: İlgisiz kök commit'ler artık girintili gösteriliyor, birbirine bağlıymış gibi görünmüyor. Eski görünüm için --no-graph-indent.
  • git log --follow: Doğrusal olmayan geçmişte (ör. subtree birleştirmeleri) yol takibi her ebeveyn için ayrı tutuluyor, sonuç gezinme sırasına bağlı değil.
  • Kısmi klonda blob temizliği: git repack -a --filter=blob:limit=1m --drop-filtered büyük blob'ları yerelden silip gerektiğinde uzaktan yeniden çekiyor.

Performans iyileştirmeleri (Performance)

İşlemÖnceSonra
git merge-base --all v4.8 v4.9 (Linux çekirdeği)167.441 adım, 0,29 sn3.887 adım, 0,01 sn
Bir monorepo'da merge-base taraması0,68 sn0,01 sn
Chromium'da (~500 bin dizin girdisi) yol sınırlı git diff~8 dakika0,07 sn
37.815 paket dosyalı depoda bir komut4,5 snO(N²) gerileme giderildi

Ayrıca --path-walk ile yeniden paketleme artık bitmap ve delta adalarıyla uyumlu. Fluent UI deposunda bitmap'li paket 558,5 MB iken path-walk ile 164,4 MB'a (yaklaşık %71 daha küçük) indi. Bu seçenek varsayılan olarak açık değil.

Nasıl yükseltilir? (How to upgrade)

Bash
# Sürümü kontrol et
git --version

# macOS (Homebrew)
brew upgrade git

# Windows
winget upgrade --id Git.Git

# Ubuntu (güncel sürüm için PPA)
sudo add-apt-repository ppa:git-core/ppa
sudo apt update && sudo apt install git

Linux dağıtımlarının kendi depoları genellikle birkaç sürüm geride kalıyor; sunucularda PPA veya kaynak derleme gerekebilir. Alesta WEB'de proje teslimlerini ve sunucu dağıtımlarını Git üzerinden yönetiyoruz; --delete-merged ve add --resolved ekip iş akışında hemen işe yarayan iki yenilik.

Sık sorulan sorular

Git 2.56 ne zaman çıktı?

Eylül 2026'nın son haftasında; GitHub'ın özet yazısı 28 Eylül tarihli.

git add --resolved ile git add . arasındaki fark ne?

--resolved yalnızca çakışmalı dosyaları alır ve içinde çakışma işareti kalmışsa hiçbirini sahneye almaz.

git branch --delete-merged güvenli mi?

Yalnızca ucu uzak dalda bulunan dalları siler. Önce --dry-run ile listeyi görmek ve önemli dallara deleteMerged = false koymak önerilir.

git history drop ile git rebase -i farkı ne?

history drop tek komutla bir commit'i çıkarır, düzenleyici açmaz ve çakışma ihtimalinde hiç başlamaz. Birleştirme commit'li geçmişte çalışmaz.

İlgili yazılar: Git 2.48 rehberi · Jujutsu (jj) rehberi · GitHub Actions CI/CD · İletişim

Kapak fotoğrafı: Flipsnack / Unsplash

Hazır mısınız?

Projenizi birlikte planlayalım

Haber sitesi, adisyon, QR menü ya da kurumsal web sitesi — ihtiyacınızı dinleyelim, demo hesabı açalım ve yazılı teklifimizi iletelim. Görüşme ücretsizdir.

WhatsAppAra