Bir özellik dalından master'a yalnızca bir alt yol nasıl seçilir ve birleştirilir

0

Soru

İlginç bir sorunum var (en azından benim için.)

Benim var master şube ve a feature yolu ayrılmış olan şube master bir süre önce. Başka bir ekip güncellemeye devam ediyor master şube ve ekibim sadece üzerinde çalışıyor feature şube.

Bu master şube, ekibimin ilgilenmediği bazı değişiklikler içeriyor. Biz sadece onları önemsiyoruz. app klasör, hepsi bu. Hatta içinde app klasör, her şeyle ilgilenmiyoruz, sadece ihtiyacımız olduğunu düşündüğümüz değişikliklerle ilgileniyoruz. Birleştirme değiliz bizim feature onların içine dal master çünkü uyguladığımız teknik yığın değişiklikleri var ve onlardan ihtiyacımız olan tek şey onların JavaScript kodu.

Bu arada, biz de değişiklikler yapıyoruz feature Şubenin app klasör. Yani içinde app klasör, sahip olmadığımız bazı değişiklikler var, sahip olmadıkları bazı değişiklikler var. Tüm değişiklikleri çalışmaya devam etmek istiyorum, ama tek değişiklik bazı seç.

Onları nasıl birleştirebilirim master Şubenin app klasör içine bizim feature Şubenin app klasör mü? Saatlerce araştırıyorum, iki klasör arasındaki farkı önizlemek için bazı VS Kod uzantılarını denedim. Ne I am seyir için bir arabirim nerede ben Kabul ya da Reddetmek her şey geliyor master şubenin ' uygulama klasörü. Bu benim tercihim olsa da, bu sorunu çözecek her türlü öneriye açığım.

Bu berbat bir durum gibi gelebilir, ancak ekibim son birkaç ay içinde bazı üyelerini kaybetti ve şubeler arasındaki fark her hafta daha da büyüdü. Şimdi bunu bir kez ve herkes için çözmek istiyoruz.

Yardımlarınız için teşekkürler.

cherry-pick git merge
2021-11-24 00:41:33
2
1

Aradığım şey, ana daldan gelen her şeyi kabul edebileceğim veya Reddedebileceğim bir arayüz app klasör

git checkout -p master app kaba ama burada hizmet etmek için iyi bir şansı var.

Bu size ne istediğinize karar verecek kadar göstermiyorsa, bir sonraki adım seçici bir birleştirmedir

git diff --merge-base @ master -- app | git apply -3

git'in otomatik birleştirme mekanizmasını kullanacak ve her zamanki gibi sıralamanız için çakışan veya bitişik değişiklikleri bırakacak veya farklılığı bir dosyaya kaydedebilir ve dikkatli olursanız uygulamadan önce tadına göre düzenleyebilirsiniz.

2021-11-24 06:42:34
1

Bunu yapmak için iki yol vardır. Basit bir değişiklikler devam edecektir, ama atmak herhangi bir taahhüt ettiler. Daha karmaşık olanı taahhütleri koruyacaktır.

Öneri

Aşağıda tartışılan iki yöntemin her ikisi de, özellikle insanlar ana dalda değişiklik yapmaya devam ettikçe, birleştirme çakışmalarına ve diğer baş ağrılarına neden olma potansiyeline sahiptir. Ayrıca, özellik dalında uygulama / klasörde değişiklikleriniz varsa, doğrudan git apply kullanmak değişikliklerinizin üzerine yazılmasına neden olabilir.

Ana dalın özellik dalına birleştirilmesini şiddetle tavsiye ederim git merge ile hiçbir ezmek. Bahsettiğiniz sapma göz önüne alındığında, birleştirme çakışmaları olabilir, ancak bu sorun değil. Birleştirme çakışmaları istediğinizi yapın: hangi değişiklikleri kabul edeceğinizi ve hangilerini reddedeceğinizi seçmenize izin verir.

Olduğu söyleniyor, burada yalnızca tek bir klasörü kiraz toplamaya benzer iki yaklaşım var.

Seçenek 1: Taahhütleri iptal et, değişiklikleri kaydet

Bu yaklaşım oldukça yalındır ve aşağıdakilerin bir kombinasyonunu kullanır git diff ve git apply:

git switch feature
git diff feature..master -- app | git apply --index

Bu olacak:

  • Özellik dalına geçin (değişiklikleri uygulayacağınız yer burasıdır)
  • Özellik dalında olmayan ana dalda yapılan tüm değişiklikleri alın.
  • Yalnızca değişiklikleri filtrele app dizin
  • Değişiklikleri şu yollarla uygulayın: git apply
  • Değişiklikleri dizine ekleyerek aşamalandırın (bu --index seçenek yapar)

Bu yaklaşımın tek dezavantajı, geçmişi korumaması veya mesaj göndermemesidir.

Oradan, değişiklikleri kendiniz yapabilirsiniz:

git commit -m "Apply changes made to master branch"

Seçenek 2: Hem taahhütleri hem de değişiklikleri alın

Bu biraz daha karmaşık ve aşağıdakilere dayanıyor git format-patch.

git switch feature
git format-patch --stdout feature..master -- app | git am

Bu olacak:

  • Özellik dalına geçin (değişiklikleri uygulayacağınız yer)
  • Özellik dalında olmayan ana dalda yapılan tüm değişiklikleri alın
  • Filtre sadece değişiklikleri tarafından yapılan app dizin
  • Bunları bir dizi düzeltme eki olarak biçimlendirin (taahhüt mesajları, yazarlar vb. İçeren)
  • Tüm bu yamaları git am kullanarak uygulayın

Değişikliklerin içeriğine bağlı olarak, bunun el ile çözmeniz gereken bir hatayla sonuçlanabileceğini unutmayın. (Bu sizi uyaracaktır)

2021-11-24 21:55:27

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................