2016-04-05 25 views
3

Gitmek için oldukça yeni ve sadece kendi başıma çalışıyorum, bu yüzden yapabileceğim özelliklerin çoğunu kullanmıyorum ama üzerinde düşündüğüm bir sürece giriyorum. yanlış ya da yanlış bir şey yapıyor.Nasıl düzgün kullanmak için git birleştirme --squash

1 taahhütlü (init) bir ana şubem var.

180 taahhütlü bir geliştirme şubem var. Bugün son olarak geliştirme dalını ustaya birleştirmeye hazırım, biraz okuma yaptım ve squash hakkında bilgi aldım. Bu, master şubesini geliştirme dalında bulunan aynı WIP taahhütleriyle kirletmeyeceğim için faydalı bir şey gibi görünüyor.

Yani master Ben şimdi tekrar develop kontrol etmek ve çalışmaya devam 2 kaydedilmesini, develop hala Kafamda 180. sahiptir vardır, ben her şeyin beklendiği gibi görünüyor Buradan
git checkout master 
git merge --squash develop 
git commit 

koştu. Ben bitbucket itilir ve bu birleştirme görmek için Projemin etrafında bir göz attım ve şu fark:

1 commit(s) on master and not on develop 
179 commit(s) on develop and not on master 

bu sadece beklenen davranış mı ve bunu göz ardı etmek gerekiyordu ya da ben yanlış bir şey mi yaptım duyuyorum.

cevap

2

Git, tüm taahhütlerinizi tek bir taahhütte birleştirdiğinden bu beklenen bir durumdur. Bu, geliştirme dalınızdakilerle karşılaştırıldığında farklı olacaktır. İşlemleri bir değişiklik kümesinin konteyneri olarak düşünün, içeriği değiştirirseniz farklı bir tane olacaktır.

Bu senaryoyu kabul etmeniz ya da iş akışınızı özellik dallarında çalışarak uyarlayabilirsiniz. master - geliştir - özellik-dal.

Özellik bittiğinde, özellik dalını geliştirmek ve silmek için özellik dalından bir birleştirme birleştirme işlemi gerçekleştirirsiniz. Artık, tüm WIP taahhütleri olmaksızın, geliştirmeyi ustalıktan birleştirme yapabilirsiniz, ör. yeni sürümler veya benzeri şeyler yaptığınızda.

+0

mantıklı. Sanırım kabul etmeliyim. Özellik dalı mantıklı ama büyük olasılıkla bir araya getireceğim birkaç özelliği bir araya getirmeden önce onu geliştireceğim. Bu yüzden aynı gemiye, sadece birkaç seviyeye kadar iniyorum. – mgabe

0

Squash'i Git'e yaptığınızda, bunları tek bir taahhütte birleştirir. Ancak, birkaç işlemin değişikliklerini yeni bir taahhütte birleştirmek istediğinizde, birleştirirsiniz. Sizin durumunuzda, yapmak istediğine inandığım şeyin "hızlı ilerlemeyi" içermeyen bir birleşmeydi. Bu tür bir birleşmeyle, sonuncusunda usta (başlangıç ​​ve birleştirme) ve devirde 180 taahhütte bulunacaktı.

kodu olması (sonra geçen dev taahhüt) olacaktır:

git checkout master 
git merge dev --no-ff 
+0

Bu, istediğim gibi geliyor ama ben denedim ve her ikisinde de 180 taahhüt var. – mgabe

+0

Bu sadece birleştirme hızlı yönlendirilirse ne olur. Hızla ilerlemeden, 180 taahhüt devirde kalırken, master'da tüm değişikliklerin ezilmesiyle tek bir taahhüdünüz var. Tam kodu denedin mi? – josemigallas

+0

Evet, tam kod, master'da 181 taahhüt ve 180 işlem geliştirdi. Git rev list - count HEAD' tarafından doğrulandı – mgabe

İlgili konular