Disaster recovery
- Git kursu
- Uzman
- Ders 32/32
- 6 dk
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
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
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=%BBeklenen çı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
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
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 featureBeklenen çı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
git branch restore-feature ____
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 |