2016-06-08 12 views
9

Senaryo: Bir github projesini hazırladım ve üzerinde çalışmaya başladım (orijinal projeyi "yukarı akış" olarak adlandırılan uzak bir proje olarak ekledikten sonra). Çatalım üzerinde çalışırken, yukarı yönlü projeye bir dizi yayın yapıldı: v1.3-kararlı, v1.4-kararlı, v1.5-deneysel, vs. Şimdi, ana şubemde upstream taahhütlerini birleştirmem gerekiyor Ancak, SADECE belirli bir sürüme kadar, örneğin, v1.4 kararlılığını bırakın. Bu senaryo için en iyi iş akışı nedir?Git birleştirme, belirli bir üst sürüm yayınından itibaren

+0

Eğer GitHub repo bir bağlantı verebilir misiniz? –

cevap

3

uzaktan kumandadaki bir etiket v1.4-kararlı olduğunu varsayarsak, çalışmanızı içeren daldan bu arayarak yerel repo için bu değişiklikleri uygulayabilirsiniz v1.4-kararlılıktan en son taahhüdün ardından, bu taahhütler tekrarlanır ve kendi işiniz en üstte düzgün bir şekilde yerleştirilir. Şayet çatallı çatalın üzerinden uzaktan kumanda önemli ölçüde değiştiyse, çatışmalar olacaktır.

v1.4-kararlı yerine

git pull --rebase origin v1.4-stable 
+0

Neden şube veya etiketi birleştirmiyorsunuz? Neden rebase? Bu sadece birleştirme işlemini birleştirir. – jszakmeister

+0

Burada kendi sorumu yanıtlıyor olabilirim, ama sanırım OP'in işlerini yukarı akışına entegre etmeye çalıştığına inandığınız için ... ... bu durumda, bir rebase mantıklı. – jszakmeister

1

Önce, v1.5-experimental için ayrılmış bir dalda çalıştığınızdan emin olun.

İkincisi,/v1.4 akıntıya için sendeki şube sıfırlayın:

git fetch upstream 
git checkout master 
git reset --hard upstream/v1.4 
git push -f 

Son olarak, v1 rebase (eğer devam eden çalışmaları yok emin olun bir sabit sıfırlama onları silip süpürecek). ustanın üstüne 5-Exprimental şube

Yumruk, activate rerere (yani v1.4 üstünde olduğu) (daha sonra birden rebase yapmanız gereken durumda: Eğer geçmişte benzer çatışmaları çözmek nasıl kayıt olacağını)

git config --global rerere.enabled true 

Sonra rebase (v1.4 üstünde şubenizden taahhüt senin tekrar): Yalnızca çıkar çatışmaları (memba ve hem yapılan eşzamanlı değişiklikler olmalıdır çözmek zorunda kalacak çatışmalar

git checkout v1.5-experimental 
git rebase master 
git push -f 

senin deneysel dal).

git fetch 
git rebase --onto $(git rev-list -n1 v1.4-stable) 

Rev-Liste kimliğini bulur:

+0

Birisine repolarında 'git reset --hard 'komutunu çalıştırmasını söylüyorsun. En azından olası sonuçları hakkında uyarınız ... –

+0

@HaraldNordgren teşekkür ederim. Cevabımı buna göre düzenledim. – VonC

+1

Yapılmakta olan işlerin olmayacağını düşünürsünüz? Bu sorunun bütün noktası, kişisel çalışmayı uzaktan kumandadaki değişikliklerle pekiştirmekle ilgili görünüyor. Git sıfırlama, imkansız görünüyor. –

2

Bu v1.4-stable bir ana dal üzerinde, salımını belirten tamamlama için bir etiket olduğunu varsayar yapmak isteyeceksiniz uzaktan kumandadaki bir dalıdır edin. Ödeme Ana ve son değişiklikleri çekin:

git checkout master 
git pull --rebase 

yanındaki bu taahhüt üstünde geliştirme şube rebase.

git rebase v.14-stable 

Bu komut etiketli v.1.4-stable taahhüt ve ondan önceki diğer tüm bültenleri içerecek şekilde şube tabanını değişecek: En çalışma ağaç temiz ve BAŞ sizin dev-dalına işaret emin olun. rebase önce

:

o---o---v.1.2---v.1.3---v.1.4---v.1.5-exp master 
    \ 
     o---o---o dev 

sonra:

o---o---v.1.2---v.1.3---v.1.4---v.1.5-exp master 
          \ 
          o---o---o dev 
-1
git pull --rebase origin v1.4-stable 
İlgili konular