Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
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ı.
Git ile Değişiklikleri Geri Almak 2: git revert
Paylaşılmış geçmişte güvenli geri alma: git revert'ün ters commit'i, reset ile revert arasındaki seçim, bir merge commit'i -m 1 ile revert etmek, branch'i yeniden merge ederken revert'ü geri almak, --no-commit ile birden çok commit ve revert sırasında conflict.
Git ile Değişiklikleri Geri Almak 1: git restore ve git reset
git restore ile dosyaları working tree'de ve index'te geri almak, --source ile geçmişten getirmek; git reset'in --soft, --mixed ve --hard modlarının HEAD'e, index'e ve working tree'ye ne yaptığı, ORIG_HEAD ile geri dönmek ve eski checkout/reset biçimleri.
Git ile Ekip Çalışması: Branch Stratejileri, Rulesets ve Conventional Commits
Bir force push'un ekip arkadaşının commit'ini nasıl sildiğinden yola çıkarak GitHub flow, Git flow ve trunk-based development'ı karşılaştırıyoruz; branch protection ile rulesets farkı, receive.denyNonFastForwards ile sunucu tarafı koruma, CODEOWNERS ve Conventional Commits.
GitHub ile Pull Request: GitHub Flow, Review ve Merge Yöntemleri
Branch, commit, push ve pull request: GitHub flow'un altı adımı, draft PR, review'a yeni push'larla cevap vermek, merge commit, squash ve rebase yöntemlerinin geçmişe etkisi, squash sonrası branch silmenin tuzağı ve fork ile upstream'i senkron tutmak.
GitHub Hesabına Bağlanmak: HTTPS, Personal Access Token ve SSH
GitHub'da repo açmaktan ilk push'a: 2021'den beri parolanın neden çalışmadığı, fine-grained ve classic personal access token farkı, credential helper'ın nasıl çalıştığı, ed25519 SSH anahtarı, gh auth login ve token'ı URL'ye gömmeyi yakalayan transfer.credentialsInUrl.
Git Pull'u Doğru Anlamak: fetch, merge, rebase ve Divergent Branches
git pull'un fetch ile merge ya da rebase'den oluştuğunu, Git 2.33.1'den beri ayrışmış branch'lerde çıkan "divergent branches" hatasını, --no-rebase, --rebase ve --ff-only seçeneklerini, pull.rebase ile pull.ff arasındaki tercihi, Git 2.51'deki pull.autostash'i ve fetch --prune'u gerçek çıktılarla görüyoruz.