Burada yanlış bir anlayışla bir takım cevaplar var git reset --soft
. git reset --soft
Sadece HEAD
(ayrı bir kafa durumundan başlayarak), tipik olarak (ve amaçlanan kullanım için) değişecek belirli bir durum olsa da, şu anda kontrol ettiğiniz dal referansını taşır. Tabii ki bir şubeniz yoksa bunu yapamaz (bu nedenle git reset --soft
sadece değişecek olan özel durum HEAD
).
Bunu düşünmenin en iyi yolu olarak buldum git reset
. Sadece hareket etmiyorsunuzHEAD
( her şey bunu yapıyor ), aynı zamanda şube ref'sini de hareket ettiriyorsunuz , örn master
. Bu, çalıştırdığınızda olanlara benzer git commit
(geçerli dal, birlikte HEAD
hareket eder), yeni bir taahhüt oluşturmak (ve ona geçmek) yerine, önceki bir taahhüde geçersiniz.
Bu, reset
bir dalı yeni bir taahhütten başka bir şeye değiştirmek değil, değiştirmek anlamına gelir HEAD
. Bunu dokümantasyon örneğinde görebilirsiniz:
Bir taahhüdü geri alma ve bir konu dalı yapma
$ git branch topic/wip (1)
$ git reset --hard HEAD~3 (2)
$ git checkout topic/wip (3)
- Bazı taahhütler yaptınız, ama onların "usta" dalda olmak için erken olduklarını fark ettiniz. Onları bir konu dalında parlatmaya devam etmek istiyorsunuz, bu nedenle geçerli HEAD'den "topic / wip" dalı oluşturun.
- Bu üç taahhütten kurtulmak için ana dalı geri sarın.
- "Topic / wip" dalına geçin ve çalışmaya devam edin.
Bu komut dizisinin amacı nedir? Burada bir dalı taşımak istiyorsunuz master
, bu yüzden master
check-out yaparken koşuyorsunuz git reset
.
Buradaki en çok oy alan cevap genellikle iyidir, ancak birkaç yanıtı yanlış anlamalarla düzeltmek için bunu ekleyeceğimi düşündüm.
Şubenizi değiştirin
git reset --soft <ref>
: halihazırda teslim alınmış olan şubenin şube işaretçisini belirtilen referanstaki işleme sıfırlar <ref>
,. Çalışma dizininizdeki ve dizindeki dosyalar değiştirilmez. Bu aşamadan itibaren taahhütte bulunmanız sizi git reset
komuttan önceki konumunuza götürecektir .
Dizininizi de değiştirin
git reset --mixed <ref>
Veya eşdeğer olarak
git reset <ref>
:
AND de ne --soft
yapar , belirtilen referanstaki taahhüdü eşleştirmek için dizini sıfırlar. İken (o dal teslim etmek şube teslim taşımak diyor çünkü) hiçbir şey yapmaz, veya eş anlamlı o senin son tamamlama durumuna endeksi sıfırlar nedeniyle, yaygın ve kullanışlı komuttur.git reset --soft HEAD
git reset --mixed HEAD
git reset HEAD
Çalışma dizininizi de değiştirin
git reset --hard <ref>
: ne --mixed
yapar VE AND çalışma dizininizin üzerine yazar. Bu komut, şubenin ref işaret ettiği tüm hareket biçimleriningit checkout <ref>
dışında (ve bu çok önemli bir noktadır reset
) benzerdir .git reset
HEAD
"Böyle ve böyle bir komut HEAD'ı hareket ettirir" hakkında bir not:
Bir komutun HEAD
. Komutunu taşıdığını söylemek yararlı değildir . İşlem geçmişinizde bulunduğunuz yeri değiştiren tüm komutlar HEAD
. Yani ne HEAD
olduğunu , nerede olursanız bir işaretçi. HEAD
sensin , ve ne zaman yaparsan o zaman hareket edeceksin.