Git rebase --skip tam olarak ne yapıyor?


107

Az önce yaptım git pull --rebase origin masterve bir çatışma çıktı.

Birincisi, bu çatışma benim dokunmadığım bir dosyadaydı ve yaklaşık 10 geri bildirim vardı. Bu neden oluyor?

Daha sonra yanlışlıkla yazdım git rebase --skipve 'o yamayı atladım'.

Bir taahhüdü atladığımdan endişelenerek, ana dalın yeni bir sürümünü kontrol ettim ve yeniden temel aldığım şube ile yeni ana şube arasında bir fark yaptım. Farkta görünen tek değişiklik en son kaydetmedir ve günlüğe bakıldığında 'atlanan' yama, kaydetme geçmişinde görünür.

Burada neler olduğunu kimse açıklayabilir mi?


11
Yanlışlıkla nasıl yazabilirim git rebase --skip. Yanlış belki? :)
manojlds

3
Ha! --Abort yazmak istedim, ancak bilinmeyen bir nedenle --skip olarak çıktı. Gerçekten düşünmüyordum. :)
mrwooster

9
kabuk geçmişi bu konuda iyidir (istemediğiniz bir şeyi yürütmenizi sağlamak için).
Florian Klein

Yanıtlar:


60

Söylediğini yapar, bir kaydı atlar . Eğer çalıştırırsanız rebase --abortaynı rebase sırasında daha sonraki bir çatışma olarak da elbette geri döndürülecek taahhüt atlanır.

Değişikliğiniz yukarı akışta zaten mevcutsa, Git kaydetmenizi uygulayamaz (ancak yama tamamen aynıysa genellikle otomatik olarak atlamalıdır). Kendi taahhüdünüz atlanacak, ancak değişiklik zaten yukarı akışa uygulandığı için mevcut HEAD'de hala var olacak.

Önemli bir değişikliğinizi kaldırmadığınızdan gerçekten emin olmalısınız;) (yeniden ödemeden önceki duruma geri dönmek için reflog'u kullanın)


4
Öyleyse kaydetme neden hala günlükte görünüyor? Ve neden eksik kesinleştirme şimdi farkta görünüyor?
mrwooster 02

3
Evet, çatışma yukarı akışta zaten çözüldü ... nedense git rebase eski birleştirme çatışmalarını getiriyor ... kafamı karıştıran başka bir şey mi? ... bu, çatışmayı atladığı anlamına mı geliyor, ancak sorunu çözen yamayı uyguladı fikir ayrılığı?
mrwooster 02

3
Bir commit upstream ile aynı değişikliğe sahip olan kendi commitinizi atladınız.
İşleminizi atladınız

1
@mittal hayır, gitmenin --skipyolu olduğunu sanmıyorum . Atla, bu kaydetmede yapılan tüm değişiklikleri bırakarak bir kaydetmeyi tamamen atlar.
knittl

3
@mittal: düşünmek git rebaseolarak kopyalama başka dal üzerinde bir daldan kaydedilmesini. Bu nedenle, bir yürütmeyi atladığınızda, kesinleştirmenin orijinal içeriği atlanır ve yama uygulanmaz (bu nedenle herhangi bir dosyada yapılan tüm değişiklikler onu hedef dalınızda yapmaz). En kolay yol, iki şubeden oluşan basit bir git deposu kurmak, her biri için birkaç işlem yapmak ve ardından bir git rebase --interactivetaahhüdü yeniden pickskip
başlatmak ve atlamaktır
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.