CodeBlanks Logo Icon CodeBlanks

Disaster recovery

silinmiş dalı reflog ile bulup reset ile kurtarırsın.

Reflog ve Felaket Kurtarma

Git'te yanlışlıkla silinen bir dal veya git reset --hard ile kaybedilen commit'ler hemen yok olmaz. git reflog komutu, HEAD göstergesinin depodaki her hareketini kronolojik olarak kaydeder. Kayıp commit'in SHA karması reflog'dan tespit edildikten sonra git reset --hard <hash> veya yeni dal açılarak veriler tamamen kurtarılır.

git reflog
# HEAD@{1}: commit: kritik ozellik eklendi
git branch kurtarilan-dal HEAD@{1}

Uygulama Reflog ile Kayıp Commit'i Kurtar

Depoda reset --hard HEAD~1 ile geri alınmış bir commit bulunmaktadır. git reset --hard HEAD@{1} çalıştırarak kayıp commit'i geri getir ve commit mesajını terminale yazdırmak için git log -1 --pretty=%B komutunu çalıştır.

Başlangıç kodu

terminal
git init -q
git config user.name "Dev"
git config user.email "dev@example.com"
echo "v1" > app.txt
git add app.txt
git commit -m "ilk commit" -q
echo "v2" > app.txt
git add app.txt
git commit -m "kurtarilacak ozellik" -q
git reset --hard HEAD~1 -q

# Reflog referansı kullanarak kayıp commit'e dön

# Son commit mesajını yazdır

Örnek çözüm

terminal
git init -q
git config user.name "Dev"
git config user.email "dev@example.com"
echo "v1" > app.txt
git add app.txt
git commit -m "ilk commit" -q
echo "v2" > app.txt
git add app.txt
git commit -m "kurtarilacak ozellik" -q
git reset --hard HEAD~1 -q

git reset --hard "HEAD@{1}" -q
git log -1 --pretty=%B

Beklenen çıktı

kurtarilacak ozellik

Uygulama Silinen Dalı Reflog ile Yeniden Oluştur

feature dalı silinmiştir ancak son commit'i HEAD@{1} üzerindedir. Silinen dalı git branch feature HEAD@{1} ile yeniden oluştur. Ardından git rev-parse --abbrev-ref feature komutu ile dal adını terminale yazdır.

Başlangıç kodu

terminal
git init -q
git config user.name "Dev"
git config user.email "dev@example.com"
echo "base" > base.txt
git add base.txt
git commit -m "base" -q
git checkout -b feature -q
echo "feature work" > feat.txt
git add feat.txt
git commit -m "feature commit" -q
git checkout master -q 2>/dev/null || git checkout main -q
git branch -D feature -q

# Silinen feature dalını reflog referansı HEAD@{1} ile yeniden oluştur

# Dal adını rev-parse ile yazdır

Örnek çözüm

terminal
git init -q
git config user.name "Dev"
git config user.email "dev@example.com"
echo "base" > base.txt
git add base.txt
git commit -m "base" -q
git checkout -b feature -q
echo "feature work" > feat.txt
git add feat.txt
git commit -m "feature commit" -q
git checkout master -q 2>/dev/null || git checkout main -q
git branch -D feature -q

git branch feature "HEAD@{1}"
git rev-parse --abbrev-ref feature

Beklenen çıktı

feature

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Yanlışlıkla silinmiş bir dalın en son commit'ini tespit edip kurtarmak için izlenmesi gereken en doğru ilk adım nedir?

  • git reflog çalıştırıp dalın silinmeden önceki HEAD noktasını bulmak Doğru cevap
  • git fsck --lost-found ile tüm dosyaları tek tek taramak
  • git revert HEAD komutuyla son değişikliği tersine çevirmek
  • .git/objects dizinindeki tüm dosyaları manuel olarak açmak

Açıklama: git reflog HEAD referansının her hareketini sakladığı için silinen dalın işaret ettiği son commit karmasını anında gösterir ve kurtarmayı kolaylaştırır.

2 Reflog Referansıyla Dal Kurtarma

Soru
git branch restore-feature ____
Cevap
git branch restore-feature HEAD@{1}

Açıklama: HEAD@{1} reflog göstergesi, HEAD'in bir önceki konumunu tam olarak işaret eder ve silinen dalı bu commit üzerinde yeniden oluşturur.

3 Kurtarma Terimleri

Kavram Anlamı
git reflog HEAD hareket geçmişini listeler
HEAD@{0} HEAD'in şu anki mevcut konumu
git reset --hard Çalışma dizinini zorla eşitler
Dangling commit Hiçbir referansı olmayan commit

Uzman bölümündeki tüm dersler