Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
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.
Git Remote ve Clone: origin, fetch, push ve Upstream
Remote'un ne olduğunu, GitHub yerine yerel bir bare repo ile git remote add, push -u ve upstream ayarını, origin/main gibi remote-tracking branch'leri, git clone'un yaptığı işleri, fetch ile merge'ün ayrımını, yeni bir branch'i paylaşmayı, git remote show/rename'i ve reddedilen push'u gerçek çıktılarla görüyoruz.
Git Conflict Çözmek: Marker'lar, merge --abort ve zdiff3
Conflict'in neden çıktığını, marker'ların nasıl okunduğunu, git status, git log --merge ve git ls-files -u ile durumu görmeyi, adım adım çözümü, git merge --abort'u, merge.conflictStyle zdiff3'ü, --ours/--theirs, mergetool ve rerere'yi gerçek çıktılarla görüyoruz; Git 2.56'daki git add --resolved'a da kısaca değiniyoruz.
Git Merge: Fast-forward, Three-way Merge ve Merge Commit
Fast-forward ile three-way merge arasındaki farkı, ortak atanın (git merge-base) rolünü, iki parent'lı merge commit'in içini, --no-ff ve --ff-only seçeneklerini, Git 2.34'ten beri varsayılan olan ort stratejisini ve merge sonrası branch temizliğini gerçek çıktılarla görüyoruz.
Git Branch: Hareketli Bir Pointer, HEAD ve git switch
Branch'in içinde tek bir commit hash'i taşıyan 41 byte'lık bir dosya olduğunu, HEAD'in nasıl çalıştığını, git branch ile listeleme, yeniden adlandırma ve silmeyi, git switch ve switch -c ile gezinmeyi, detached HEAD'e girip çıkmayı ve git checkout'un eski kullanımını gerçek çıktılarla görüyoruz.
Git diff ile Değişiklikleri Karşılaştırmak
git diff'in working tree, index ve HEAD arasında hangi karşılaştırmayı yaptığını, diff çıktısının nasıl okunduğunu, --stat, --name-only ve --word-diff gibi özet görünümleri, commit'ler arası diff'i ve iki nokta ile üç nokta (--merge-base) farkını gerçek çıktılarla görüyoruz.
Git Geçmişine Bakmak: git log, git show, git blame ve Alias'lar
git log'un --oneline, --graph, --stat, -p, --format, --author, --since, --grep ve --follow seçenekleriyle geçmişte geziniyor, -S ile -G arasındaki farkı fiyatı değişen bir satırla görüyoruz. git show ile tek commit'e ve eski bir dosya hâline bakıyor, git blame -L ile satırların kaynağını buluyor, alias'larla uzun komutları kısaltıyoruz.