Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Git 3.0'a Hazırlık: Ne Değişiyor, Ne Kalkıyor, Bugünden Ne Yapmalı
Git 3.0 için resmi durumu (BreakingChanges.adoc: henüz tarih yok) GitLab ve LWN'in aktardığı plandan ayırıyoruz. main, SHA-256 ve reftable varsayılanlarını, safe.bareRepository'yi, zorunlu Rust'ı, kaldırılacak komutları ve git checkout'un neden kaldığını Git 2.54'te deneyip bir hazırlık listesi çıkarıyoruz.
Git 2.50–2.56: git history, Config Tabanlı Hook'lar ve git add --resolved
Git 2.50'den güncel 2.56'ya gelenleri görüyoruz: git history reword ve split (2.55 fixup, 2.56 drop), config tabanlı ve paralel hook'lar, stash export/import, pull.autostash ve conflict durumu, git last-modified, git repo info, reflog drop, branch --delete-merged, add --resolved ve -h çıkış kodu değişikliği.
Git 2.40–2.49: reftable, SHA-256, git replay ve Yeni git config
Git 3.0'ın temellerinin atıldığı 2.40–2.49 dönemini gerçek çıktılarla görüyoruz: reftable ref deposu ve git refs migrate, SHA-256 repo'larının bugünkü durumu, git config'in get/set/unset/list alt komutları, worktree add --orphan, git replay, safe.directory prefix'i, git backfill ve Rust'ın ilk adımı.
Git 2.23–2.39: checkout'tan switch ve restore'a, Eski Alışkanlıktan Yenisine
Git 2.23–2.39 arasında gelenleri eskiyle yeniyi yan yana koyarak görüyoruz: checkout'tan switch ve restore'a geçiş, init.defaultBranch, pull'un divergent branches hatası, sparse-checkout, maintenance, fsmonitor, ort ve remerge-diff, rebase --update-refs, force-if-includes, safe.directory ve SSH imzalama.
Git Hook'ları ve Commit İmzalama: pre-commit'ten SSH İmzasına
pre-commit ve commit-msg hook'larını gerçek çıktılarla yazıyor, core.hooksPath ile ekiple paylaşıyor, Git 2.54'ün config tabanlı hook'larını ve git hook list'i deniyoruz. Ardından commit'leri SSH anahtarıyla imzalıyor, allowed signers ile doğruluyor ve GitHub'daki Verified rozetinin şartlarını görüyoruz.
Git bisect ve git worktree: Hatayı Bulan Commit ve Aynı Anda İki Branch
Hatayı getiren commit'i git bisect ile ikili aramayla buluyoruz: good ve bad işaretlemek, bisect log ve reset, git bisect run ile çıkış koduna göre otomatik arama ve exit 125. Ardından git worktree ile yarım işi bozmadan ayrı bir klasörde hotfix yapıyor, worktree list/remove/prune'u ve stash ile ne zaman yer değiştirdiğini görüyoruz.
Git Tag ve Release: Sürümleri İşaretlemek, git describe ve GitHub Releases
Sürümleri git tag ile işaretliyoruz: lightweight ve annotated tag farkı, tag object'i, semver, push'un neden tag göndermediği, --tags ile --follow-tags, git describe çıktısını okumak, GitHub Releases, tag silmek ve yayınlanmış bir tag'i taşımanın neden tehlikeli olduğu.
Git reflog: Kaybolan Commit'leri ve Silinen Branch'leri Geri Getirmek
Yanlışlıkla yapılan bir reset --hard'dan sonra commit'leri git reflog ile geri getiriyoruz: HEAD@{n} ile HEAD~n farkı, ORIG_HEAD ile son merge'ü geri almak, silinen branch'i reflog'dan bulmak, branch'in kendi reflog'u ile rebase'den dönmek, reflog'un yerel ve süreli olması.
Git Interactive Rebase ve Squash: PR Öncesi Geçmişi Toparlamak
Dağınık bir feature branch'ini git rebase -i ile üç temiz commit'e indiriyoruz: todo listesi, pick, reword, edit, squash, fixup, drop ve sıra değiştirme, commit --fixup ile --autosquash akışı, GitHub'ın squash merge'ü ile farkı ve Git 2.54'teki deneysel git history reword.
Git rebase: Geçmişi Yeniden Yazmak ve Güvenle Push'lamak
Merge ile rebase'i aynı senaryoda karşılaştırıyoruz: rebase'in commit'leri neden yeni hash'lerle yeniden yazdığı, rebase sırasında conflict ve ters dönen HEAD, pull --rebase, golden rule, rebase edilmiş branch'i --force-with-lease ve --force-if-includes ile push'lamak ve üst üste branch'ler için --update-refs.
Git cherry-pick: Tek Bir Commit'i Başka Branch'e Taşımak
Bir hotfix'i main'den release branch'ine git cherry-pick ile taşıyoruz: yeni commit'in neden yeni hash aldığı, author ve committer farkı, -x ile iz bırakmak, commit aralığı almak, conflict'te --continue/--abort/--skip, git cherry ile eşdeğer commit'leri bulmak ve cherry-pick'in ne zaman koku olduğu.
Git Stash: Yarım Kalan İşi Kenara Koymak
git stash ile yarım işi saklamak: untracked dosyalar için -u, isimli kayıtlar, list ve show, apply ile pop farkı, --staged ve --index, stash.index ayarı, pop sırasında conflict, stash branch ve Git 2.51'in stash export/import komutları.