Gönderen Git SCM Kitabı :
Çoğunlukla, projenizin bir parçası üzerinde çalışırken, işler dağınık bir durumdadır ve dalları bir parça için başka bir şey üzerinde değiştirmek istersiniz. Sorun şu ki, daha sonra bu noktaya geri dönebilmeniz için yarı bitmiş bir iş yapmak istemiyorsunuz. Bu sorunun cevabı git stash komutudur.
Stashing, çalışma dizininizin kirli durumunu alır - yani, değiştirilmiş izlenen dosyalarınız ve aşamalı değişiklikleriniz - ve istediğiniz zaman yeniden uygulayabileceğiniz tamamlanmamış değişikliklerin bir yığına kaydeder.
Bu açıklama göz önüne alındığında, bunun bir Anti Patern olduğunu söyleyebilirim. Git Stash'ın aşırı basitleştirilmiş bir açıklaması, kaynak kontrolünün "Kes ve Yapıştır" olduğudur. Bir sürü değiştirilmiş dosyayı alıp, Git'in normal dallanma iş akışının dışındaki bir tutma kaleminde "saklayın" ve sonra bu değişiklikleri daha sonraki bir tarihte farklı bir dalda tekrar uygulayın.
Biraz daha geriye gitmek, ustalığa bağlılık buradaki anti paterndir . Dalları kullanın. Onlar bunun için tasarlandı.
Bu gerçekten aşağı kaynar:
Duvara bir vida çakabilirsiniz ve bir resmi tutar, ancak bir tornavida kullanarak yapmanız gereken şeydir. Tornavida tam yanınızda otururken çekiç kullanmayın.
"Bozuk" Kod Yazma Hakkında
Aşağıdaki düşünce olsa da, bu görüşe deneyimden geldim.
Erken taahhüt ve sık sık taahhüt etmek. İstediğiniz kadar bozuk kod verin. Yerel bir işlem geçmişinizi bir şeyleri keserken "puan kazan" olarak görün. Mantıklı bir iş yaptıktan sonra bir taahhütte bulunun. Tabii her şeyi bozabilir, ama bu sürece yok gibi önemli değil itmek bu teslimleri. Bastırmadan önce, taahhütlerini yeniden yap ve ez.
- Yeni şube oluştur
- Hack kesmek Hack kesmek
- Bozuk kod ver
- Kodu cilala ve çalıştır
- Çalışma kodu taahhüt
- Rebase ve Squash
- Ölçek
- Testler geçerken it
OP için, bu Linux kernal mesaj dizisi ilgi çekici olabilir, çünkü OP ekibinin bazı üyeleri Git'i benzer şekilde kullanıyor gibi görünüyor.
@RibaldEddie, bir yorumda şöyle dedi:
Öncelikle, bir stash "dallanma iş akışının" dışında değildir, çünkü kaputun altında bir stash başka bir daldır.
(birçok insanın gazabına maruz kalma riski altında)
Linus dedi ki:
"Git stash" ile, çok sayıda farklı statshed olayına sahip olabilirsiniz, ancak birbirlerini sıraya sokmazlar - sakladığınız rasgele bağımsız yamalardır, çünkü bir noktada sakıncalıdır.
@RibaldEddie'nin söylemeye çalıştığı şey, git stash
bir özellik dalı iş akışında kullanabileceğinizdir - ve bu doğrudur. Bunun kullanımı git stash
sorun değil. Master ve kullanma taahhüdünün birleşimidir git stash
. Bu bir anti örüntüdür.
netleştirilmesi git rebase
@ RibaldEddie'nin yorumundan:
Yeniden düzenleme, kopya yapıştırma işlemine çok benzer , hatta taahhüt edilen geçmişi daha da kötüleştirir.
(Vurgu madeni)
Yerel taahhüt tarihçesi olduğu sürece taahhüt geçmişini değiştirmek kötü bir şey değildir . Yeniden iadenizi çoktan zorladığınızı kabul ederseniz, esasen şubenizi kullanan başka birini yetim edersiniz. Bu kötü.
Şimdi, bir gün boyunca birkaç taahhütte bulunduğunuzu varsayalım. Bazı taahhütler iyiydi. Bazıları ... çok iyi değil. git rebase
Taahhütlerinizi ezmekle birlikte verilen komut, yerel taahhüt geçmişinizi temizlemek için iyi bir yoldur. Bir şubede halka açık şubelerle birleşmek güzel, çünkü ekibinizin ortak şubelerinin taahhüt geçmişini temiz tutuyor. Yeniden düzenlemeden sonra, tekrar test etmek istersiniz, ancak testler geçerse, birkaç kirli olanlar yerine bir tane temiz işlem uygulayabilirsiniz.
Temiz taahhüt tarihinde bir başka ilginç Linux Çekirdeği ipliği var .
Yine, Linus'tan:
Temiz geçmiş istiyorum, ama bu gerçekten (a) temiz ve (b) tarih anlamına gelir.
İnsanlar özel ağaçlarını (kendi çalışmalarını) yeniden diriltebilir (ve muhtemelen etmelidir ). Bu bir temizlik . Ama asla başkalarının kodu yoktur. Bu bir "yok etme tarihi".
Yani tarihin kısmı oldukça kolaydır. Sadece bir ana kural ve bir de küçük açıklama var:
Asla ASLA başkalarının tarihini yok etmemelisin. Başkalarının yaptığı işleri taahhüt etmemelisin. Temel olarak, eğer sizin imzanız yoksa, sınırsız kalır: yeniden adlandıramazsınız, çünkü o sizin değil.
Bunun gerçekten diğer halkların tarihi ile ilgili olduğuna dikkat edin, diğer halkların kuralları hakkında değil . Size e-postayla gönderilen bir düzeltme eki olarak bir şeyler gönderdiler ve siz "git am -s" ile uyguladınız, o zaman bu onların kodu, ama bu
sizin tarihiniz.
Bu yüzden, “git rebase” meselesinde çılgına dönebilirsin, şifreyi yazmasan bile, taahhüdün kendisi özel olduğu sürece.
Kural için küçük bir açıklama: Geçmişinizi bir kamu sitesinde yayınladıktan sonra, diğer insanlar onu kullanıyor olabilir ve bu yüzden artık artık özel geçmişiniz değil .
Bu yüzden küçük açıklama, bunun yalnızca "sizin taahhüdünüz" ile ilgili olmadığı, aynı zamanda ağacınız için özel olduğu ve henüz onu dışarı atmadığınız ve açıklayamadığınız.
...
İlk kurallar oldukça açık ve kolay olmasına rağmen, şimdi "temiz" kısım biraz daha ince:
Kendi geçmişinizi okunabilir tutun
Bazı insanlar bunu sadece kafasındaki işleri yaparak ve hata yapmadan yaparak yaparlar. ama bu çok nadirdir ve geri kalanımız için sorunlarımız üzerinde çalışırken "git rebase" vb. kullanırız.
Yani "git rebase" yanlış değil. Ama sadece SİZİN ÖZEL ÖZEL git ağacınız ise doğru.
Saçmalıklarını açığa vurma.
Bunun anlamı: Eğer hala "git rebase" aşamasındaysanız, dışarı itmeyin. Hazır değilse, etrafa yamalar gönderir ya da halka genel olarak anlatmadığınız özel git ağaçlarını kullanırsınız (tıpkı "yama serisi değiştirme" gibi).
(vurgu madeni)
Sonuç
Sonunda, OP bunu yapan bazı geliştiricilere sahiptir:
git checkout master
(edit files)
git commit -am "..."
(edit files)
git stash
git pull
git stash (pop|apply)
Burada iki problem mevcut:
- Geliştiriciler usta taahhüt ediyoruz. Bunu hemen kilitleyin. Gerçekten, bu en büyük problem.
- Geliştiriciler sürekli olarak
git stash
ve git pull
özellik dallarını kullanmaları gerektiğinde master'ı kullanıyorlar.
Kullanırken yanlış bir şey yok git stash
- özellikle çekmeden önce - ama git stash
bu şekilde kullanmak Git'te daha iyi iş akışları olduğunda anti-paterndir.
git stash
Kırmızı bir ringa balığı kullanmaları . Sorun bu değil. Master'a karar vermek problemdir.