git stash, reflog ve reset: değişiklikleri güvenceye almak ve kurtarmak
Kısaca: Stash ile bitmemiş işi kenara koyarsınız, reset ile durumları geri alırsınız ve reflog, neredeyse her görünürde kaybolmuş commit’i kurtarmaya yardımcı olur.
Biraz daha ayrıntılı: Git sandığınızdan çok daha fazlasını saklar: reset --hard, yanlışlıkla silinmiş bir dal veya başarısız bir rebase’ten sonra bile, hızlı davrandığınız sürece çoğu zaman her şeyi kurtarabilirsiniz. Küçük bir repertuvar yeterlidir.
Ayrıntılı
git stash: işi kenara koymak
git stash # mevcut değişiklikleri kenara koy
git stash -u # yeni (izlenmeyen) dosyaları da
git stash list # listele
git stash pop # son stash'i geri getir (ve sil)
git stash apply stash@{1} # belirli birini geri getir (koru)
git stash drop # sil
git stash push -m "experiment" file.txtCommit etmeden dal değiştirmeniz gerektiğinde yararlıdır. Stash’ler yalnızca yerel olarak size aittir; önemli işi kendi dalına commit etmek daha iyidir.
git reset: sıfırlamak
git reset --soft HEAD~1: son commit’i geri al, değişiklikler hazırlanmış (staged) kalır.git reset HEAD~1(mixed): commit’i geri al, değişiklikler çalışma dizininde kalır.git reset --hard HEAD~1: commit’i ve değişiklikleri at (tehlikeli!).git restore filebir dosyanın değişikliklerini atar,git restore --staged fileonu hazırlık alanından çıkarır.- Paylaşılan dallarda reset yerine
git revert <commit>daha iyidir: geçmişi yeniden yazmadan değişikliği geri alan yeni bir commit oluşturur.
git reflog: güvenlik ağı
Reflog, HEAD ve dalların son haftalarda nereye işaret ettiğini kaydeder:
git reflog
git reset --hard e4f5g6h # eski durumu geri yükle
git branch rescued e4f5g6h # veya yeni bir dal olarak kaydetBu, yanlış bir reset, rebase veya silinmiş dal sonrasında kaybolan commit’leri kurtarır (varsayılan olarak yaklaşık 90 gün, yalnızca yerel depoda).
Tipik kurtarmalar
- Dal yanlışlıkla silindi:
git reflog, sonragit branch name <sha>. - Rebase bozuldu:
git rebase --abortveyagit reset --hard ORIG_HEAD. - Yanlış dala commit edildi:
git branch new, sonra eskisindegit reset --hard HEAD~1. - Dosya silindi ama commit edilmişti:
git restore --source=<commit> -- file. - Hiç commit edilmedi: o zaman Git çoğunlukla yardımcı olamaz; bitmemiş olsa bile düzenli commit edin (WIP commit’leri) ve sonra düzenleyin.
Ayrıca bak: Git, git rebase, git bisect ve cherry-pick, Birleştirme çakışmasını çözmek, Push reddedildi