Git'teki taahhüdümü geri almaya çalıştım. Kullanması tehlikeli git reset --hard HEAD~1mi?
Farklı seçenekler arasındaki fark git resetnedir?
Yanıtlar:
git resetbeş "mod" biliyor: yumuşak, karışık, sert, birleştirme ve tutma. İlk üçünden başlayacağım, çünkü bunlar genellikle karşılaşacağınız modlar. Bundan sonra güzel bir küçük bonus bulacaksınız, bu yüzden bizi izlemeye devam edin.
Kullanırken git reset --soft HEAD~1geçerli daldan son yürütmeyi kaldırırsınız, ancak dosya değişiklikleri çalışma ağacınızda kalır . Ayrıca değişiklikler dizininizde kalacaktır, bu nedenle a ile takip etmek, git commitdaha önce "kaldırdığınız" kaydetme ile aynı değişikliklerle bir kayıt oluşturacaktır.
Bu varsayılan moddur ve soft ile oldukça benzerdir. git reset HEAD~1Sizinle bir yürütmeyi "kaldırırken" , değişiklikleri çalışma ağacınızda tutacak, ancak dizinde tutmayacaksınız; bu nedenle, kaydetmeyi "yeniden yapmak" istiyorsanız, kaydetmeden git addönce değişiklikleri ( ) eklemeniz gerekir .
Kullanırken git reset --hard HEAD~1, olur tüm uncommited değişiklikleri kaybetmek son gerçekleşen değişiklikler taahhüt ek olarak. Değişiklikler çalışma ağacınızda git statuskalmayacaktır, bu nedenle bir komut vermek size deponuzda herhangi bir değişiklik olmadığını söyleyecektir.
Bununla dikkatli olun. Asla takip edilmeyen git(konuş: taahhüt edilmiş veya en azından dizine eklenmemiş) beklenmeyen değişiklikleri yanlışlıkla kaldırırsanız , bunları tekrar kullanmanın bir yolu yoktur git.
git reset --keep HEAD~1ilginç ve kullanışlıdır. Yalnızca geçerli HEAD ve verilen commit arasında farklı olan dosyaları sıfırlar . Bu dosyalardan herhangi birinde değişiklik yapılmamışsa sıfırlamayı iptal eder. Temelde daha güvenli bir versiyonu gibi davranır hard.
Bu mod, bir dizi değişikliğiniz olduğunda ve bu değişiklikleri kaybetmeden farklı bir şubeye geçmek istediğinizde (örneğin, yanlış dalda çalışmaya başladığınızda) özellikle yararlıdır.
Git reset belgelerinde bunun hakkında daha fazla bilgi edinebilirsiniz .
Not
Bir commit'i git resetkaldırmak için yaptığınızda , commit gerçekten kaybolmaz, sadece ona veya çocuklarından herhangi birine işaret eden bir referans yoktur. "Silinen" bir kaydı, git resetSHA-1 anahtarını bularak, örneğin git reflog.
--hardneredeyse hiçbir zaman yapılacak doğru şey değil, çünkü --keepçok daha güvenli ve --hardişe yarayan senaryoların çoğu için geçerli . Parmaklarınızı kullanmak için eğitmek --keepsizi bir gün kurtarabilir ...
keep. ;)
Git sıfırlamanın 5 ana modu vardır: yumuşak, karışık, birleştirilmiş, zor, sakla . Aralarındaki fark, baş, aşama (dizin), çalışma dizini değiştirmek veya değiştirmemektir .
Git reset --hard baş, dizin ve çalışma dizinini değiştirecektir.
Git reset --soft yalnızca başlığı değiştirir. Dizinde değişiklik yok, çalışma dizini.
Diğer bir deyişle, taahhüdünüzü geri almak istiyorsanız, --soft yeterince iyi olmalıdır. Ancak bundan sonra hala dizininizde ve çalışma dizininizde hatalı işlemeden değişiklikler var. Dosyaları değiştirebilir, düzeltebilir, dizine ekleyebilir ve yeniden kaydedebilirsiniz.
--Hard ile, projenizde tamamen temiz bir sayfa açarsınız. Sanki son işlemden itibaren herhangi bir değişiklik olmamış gibi. İstediğinizin bu olduğundan eminseniz, ilerleyin. Ancak bunu yaptığınızda, son taahhüdünüzü tamamen kaybedeceksiniz. (Not: Kayıp kaydı kurtarmanın hala yolları vardır).
Bu, reset komutunun açıklamasını grafik olarak gösteren faydalı bir makaledir.
https://git-scm.com/docs/git-reset
Sıfırla - sabit, kontrol etmeden çalışma kopyanızın üzerine yazdığı için oldukça tehlikeli olabilir, bu nedenle dosyayı hiç teslim etmediyseniz, yok olur.
Kaynak ağacına gelince, taahhütleri geri almanın hiçbir yolu yok. Yine de büyük olasılıkla kapakların altında sıfırlama kullanırdı
git reset --help(bence) bu beş modu veya en azından OP tarafından sorulan ikisini oldukça iyi açıklayanlardan da bahsedeceğim .
Git reset --hard ve git reset --soft arasındaki temel fark budur:
--soft
İndeks dosyasına veya çalışma ağacına hiç dokunmaz (ancak tüm modların yaptığı gibi, kafayı sıfırlar). Git statüsünün dediği gibi bu, tüm değiştirilmiş dosyalarınızı "Değişiklikler yapılacak" olarak bırakır.
--hard
Dizini ve çalışma ağacını sıfırlar. O zamandan beri çalışma ağacındaki izlenen dosyalarda yapılan tüm değişiklikler atılır.