Git'teki taahhüdümü geri almaya çalıştım. Kullanması tehlikeli git reset --hard HEAD~1
mi?
Farklı seçenekler arasındaki fark git reset
nedir?
Yanıtlar:
git reset
beş "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~1
geç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 commit
daha ö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~1
Sizinle 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 status
kalmayacaktı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~1
ilginç 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 reset
kaldı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 reset
SHA-1 anahtarını bularak, örneğin git reflog
.
--hard
neredeyse hiçbir zaman yapılacak doğru şey değil, çünkü --keep
çok daha güvenli ve --hard
işe yarayan senaryoların çoğu için geçerli . Parmaklarınızı kullanmak için eğitmek --keep
sizi 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.