2016-02-25 43 views
8

Yukarı akışta/ana bilgisayarda tuttuğum iki dalım var. Bir dalın diğeri ata olduğu için bir çizgi oluştururlar.Tek bir satırda birden çok dalın yeniden oluşturulmasının en kolay yolu

U1 (upstream/master) 
    \ 
    A -- B (fixes) 
     \ 
      C -- D (features) 

Daha sonra yukarı/usta ... ileriye

U1 -- U2 (upstream/master) 
    \ 
    A -- B (fixes) 
     \ 
      C -- D (features) 

hamle ... ve üstünde her iki şube rebase istiyorum.

U1 -- U2 (upstream/master) 
     \ 
     A' -- B' (fixes) 
       \ 
        C' -- D' (features) 

Bunu yapmanın iki yolunu biliyorum, her biri dezavantajlı.

git rebase upstream/master fixes 
git rebase fixes features 

Bu iki komut bazen çalışır ve bazen ikinci komutta çakışmaları birleştirir.

git rebase upstream/master features 
# figure out the hash code of the new commit corresponding with B' 
git branch -f fixes <sha of B'> 

Bu yalnızca tek bir rebase kapsar, ancak dalları hareketli sıkıcı ve hata eğilimli olduğunu.

Rebase --preserve-birleştirmelere baktım, ancak bu birleştirme taahhütleri olmadığından uygulanabilir görünmüyor.

Rebase'yi başarmanın daha iyi bir yolu var mı?

+3

Bana böyle bir iyilik ve kullanım şemaları yapabilir miyiz: 'A - B - C'? Bu sadece sorunuzu daha kolay düşünmekle kalmayacak, aynı zamanda gelecekte başkalarına da faydalı olacaktır. –

+1

Düzenlendi. Daha açık mı? –

+0

Çok güzel bir iş çıkmıştı. –

cevap

2

Birleştirme ihtilaflarından kaçınmanın bir yolu, şubeleri ön isabaklama geçmişinden post rebase olanına taşımaktır. Kuşkusuz bu korkunç bir şey çünkü her bir islemin yeni versiyonunu bulmayı gerektiriyor, fakat gereksiz bir şekilde bir araya gelmekten daha hızlı olabilir. Örn.,

örn.

git yukarı/usta özelliklerini

U1 -- U2 (upstream/master) 
     \ 
     A' -- B' 
       \ 
        C' -- D' (features) 

git şubesinin -f düzeltmeleri (SHA B için ') şube işaret # Değişim rebase.

U1 -- U2 (upstream/master) 
     \ 
     A' -- B' (fixes) 
       \ 
        C' -- D' (features)