Nasıl çalıştığını bilmiyorsanız, bir taahhüdü geri almak biraz korkutucu. Ama anlarsanız aslında inanılmaz derecede kolaydır.
Diyelim ki C, HEAD'ınız ve (F) dosyalarınızın durumu.
(F)
A-B-C
↑
master
C komutunu tıklatmak ve bir daha asla görmek ve yerel olarak değiştirilmiş dosyalardaki tüm değişiklikleri kaybetmek istiyorsunuz . Bunu yap:
git reset --hard HEAD~1
Sonuç:
(F)
A-B
↑
master
Şimdi B KAFA. Çünkü kullandın--hard
, dosyalarınız işlem B'de durumlarına sıfırlanır.
Ah, ama C taahhüdünün bir felaket olmadığını, ancak biraz uzakta olduğunu varsayalım. Taahhüdü geri almak istiyorsunuz, ancak daha iyi bir taahhütte bulunmadan önce değişikliklerinizi biraz düzenlemek için saklamak istiyorsunuz. Buradan başlayarak, KAFA olarak C ile:
(F)
A-B-C
↑
master
Bunu, aşağıdakileri bırakarak yapabilirsiniz --hard
:
git reset HEAD~1
Bu durumda sonuç:
(F)
A-B-C
↑
master
Her iki durumda da, HEAD en son taahhüdün sadece bir göstergesidir. Yaptığın zamangit reset HEAD~1
Git'e HEAD işaretçisini bir işlem geri götürmesini söylersiniz. Ancak (kullanmadığınız sürece --hard
) dosyalarınızı olduğu gibi bırakırsınız. Şimdi git status
C'ye giriş yaptığınız değişiklikleri gösteriyor. Hiç bir şey kaybetmediniz!
En hafif dokunuş için taahhüdünüzü bile geri alabilir, ancak dosyalarınızı ve dizininizi bırakabilirsiniz :
git reset --soft HEAD~1
Bu sadece dosyalarınızı yalnız bırakmakla kalmaz, dizininizi bile yalnız bırakır . Ne zaman yaparsıngit status
, aynı dosyaların daha önce olduğu gibi dizinde olduğunu görürsünüz. Aslında, bu komuttan hemen sonra, yapabilirdiniz git commit
ve az önce yaptığınız aynı taahhüdü yeniden yapardınız .
Bir şey daha var: İlk örnekteki gibi bir taahhüdü yok ettiğinizi varsayalım , ama sonuçta ihtiyacınız olduğunu mu keşfettiniz ? Zor şanslar, değil mi?
Hayır, orada hala geri almanın bir yolu. Yazın git reflog
ve bir listesini göreceksiniz (kısmi) işlemek Şas sen etrafında hareket ettik (yani, sağlamalarının) siz yok işlemek ve bunu bulun.:
git checkout -b someNewBranchName shaYouDestroyed
Şimdi bu taahhüdü dirilttin. Taahhütler Git'te 90 gün boyunca gerçekten yok edilmez, bu nedenle genellikle geri dönüp kurtulmak istemediğiniz birini kurtarabilirsiniz.