Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
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.
Git ile Dosya Takibi: .gitignore, git rm --cached ve git mv
.gitignore pattern'lerini, ! ile istisnayı ve git check-ignore -v ile hangi kuralın devrede olduğunu görüyoruz. Zaten commit'lenmiş bir .env'in neden .gitignore'a rağmen takip edildiğini ve git rm --cached ile nasıl çıkarıldığını, global excludes'u, git mv'yi ve .gitattributes ile satır sonlarını ele alıyoruz.
Git Commit'in İçi: Snapshot, Object'ler ve Hash
Commit'in diff değil snapshot olduğunu git cat-file ile commit, tree ve blob object'lerini açarak görüyor, hash'i shasum ile elle hesaplıyor, değişmeyen dosyanın neden ikinci kez saklanmadığını buluyoruz. İyi bir commit mesajının kurallarını ve git commit --amend'in neden yeni bir commit ürettiğini öğreniyoruz.
İlk Git Repo'su: git init, Staging Area ve İlk Commit
bookstore repo'sunu git init ile sıfırdan kuruyor, .git klasörüne ilk kez bakıyoruz. Working tree, staging area ve repository üçlüsünü git status, git add ve git commit ile adım adım görüyor, status -s'in iki sütununu ve MM durumunun neden commit'e ilk hâli taşıdığını öğreniyoruz.
Git Kurulumu ve İlk Ayarlar: git config ile Doğru Başlangıç
Git'i macOS, Windows ve Linux'a kurup sürümünü kontrol ediyor, system/global/local ayar katmanlarını, user.name ve user.email'i, init.defaultBranch main'in neden gerektiğini, core.editor'ü ve core.autocrlf'i görüyoruz. git config list/get/set/unset (2.46+) alt komutlarını eski --get biçimiyle karşılaştırıyoruz.
Git ve GitHub Nedir? Sürüm Kontrolüne Giriş
Sürüm kontrolü neden var, merkezi ve dağıtık araçlar arasındaki fark ne, Git ile GitHub neden aynı şey değil? Sunucusu silinen bir repo'da geçmişe bakıp commit atarak dağıtık çalışmayı deniyor, Git'in kısa tarihçesini, DevOps'taki yerini ve serinin kurgusunu görüyoruz.