git reflog nedir? Yanlışlıkla silinen bir dalı veya reset --hard ile kaybolan commit'leri nasıl kurtarırsınız?
Cevap
git reflog, yerel depoda HEAD'in ve dalların geçtiği tüm konumların kaydıdır. Commit, checkout, reset, rebase, merge gibi her işlem buraya yazılır. Bir commit hiçbir daldan erişilemez hâle gelse bile reflog'da referansı durur ve Git onu bir süre silmez (varsayılan olarak erişilemeyen kayıtlar için 30 gün, diğerleri için 90 gün).
git reflog
# a1b2c3d HEAD@{0}: reset: moving to HEAD~3
# 9f8e7d6 HEAD@{1}: commit: ödeme sayfası eklendi
# 5c4b3a2 HEAD@{2}: commit: sepet hesaplaması düzeltildiSenaryo 1: git reset --hard ile commit'leri kaybettim
git reflog # reset öncesi konumu bul: HEAD@{1}
git reset --hard HEAD@{1} # o konuma geri dön
# veya daha güvenli: yeni bir dalda kurtar
git branch kurtarma 9f8e7d6Senaryo 2: Merge edilmemiş bir dalı sildim
git branch -D feature/odeme # "Deleted branch feature/odeme (was 9f8e7d6)."
git branch feature/odeme 9f8e7d6
# hash'i hatırlamıyorsanız: git reflog | grep odemeSenaryo 3: Hatalı bir rebase
git reflog # "rebase (start)" satırından önceki konumu bul
git reset --hard HEAD@{5}
# veya: git reset --hard ORIG_HEAD (rebase/merge/reset sonrası Git bunu ayarlar)Sınırlar
- Reflog yereldir; push edilmez ve başka bir makinede bulunmaz.
- Hiç commit edilmemiş değişiklikler reflog'da yoktur.
reset --hardile kaybolan commit edilmemiş değişiklikler genelde geri gelmez (sadecegit addedilmişlersegit fsck --lost-foundile blob'lar bulunabilir). git gcve süre dolumu sonrası erişilemeyen commit'ler kalıcı olarak silinir.
İlgili Git soruları
- git merge ile git rebase arasındaki fark nedir?
- git reset ile git revert arasındaki fark nedir?
- İyi bir code review nasıl yapılır? .gitignore'a neler eklenmelidir?
- Interactive rebase ile commit'leri nasıl düzenler ve squash edersiniz?
- git cherry-pick ve git stash ne işe yarar? Hangi durumlarda kullanılır?
- Merge conflict nedir ve nasıl çözülür?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.