2012-09-10 17 views
29

Başka bir özellik dalından yanlışlıkla bir özellik dalı yaratan bir iş arkadaşına, ana bilgisayardan ikincisini oluşturmak yerine, yardımcı olmaya çalışıyorum. İşte düşünceBir git dalını iki dalda mı bölüyorsun?

Master ---A---B---C 
        |\ 
      Foo | E---F---F---H 
        | 
      Bar J---K---L---M 

bir yolu FooV2 ve BarV2 dalları oluşturmak olacaktır ve Cherry- istiyoruz ... ... şimdi ne var esasen

Master ---A---B---C 
        \ 
       Foo E---F---F---H 
           \ 
          Bar J---K---L---M 

olduğunu Ve burada olmasını istiyorum ne Bireysel taahhütleri uygun V2 şubelerine seçin. Ama merak ediyorum, bu durumu halletmenin daha iyi bir yolu var mı?

cevap

12

O yapabildin gibi görünüyor bana:

git checkout J 
git rebase master 

Düzenleme:

ben önerdi ve bu işe yaramazsa neyi çalıştı. knittl'in önerisi çalışmıyor (kutumda). İşte benim için çalışma yaptı budur: bizi sadece "bu komutu çalıştırmak" biraz daha iyi şeyleri anlamak yardımcı olacaktır daha genel yanıt için

git rebase --onto master foo bar 
+2

Çok teşekkürler; Düzenlenen sürüm harika çalıştı! Herkes bu etrafında biraz daha ayrıntılı ihtiyacı durumunda , neredeyse tam bu örneği kapsar Pro Git kitabın "Diğer İlginç rebases" bölümü vardır: http://git-scm.com/book/en/Git-Branching- –

+1

'git usta foo bar' --onto rebase rebasing şu anlama gelir: "foo" olmadan "bar" al ve usta – schoetbi

6

Sen efendi üzerine Bar şube rebase:

git rebase --onto C H M 

, onları el çözmek zorunda (ama aynı zamanda kiraz alırken bunu yapmak zorunda) bazı yamalar çatışma halinde. Dikkatli olun: tarih zaten yayınlandığında yeniden yaratmayın.

57

, biz daha büyük bir örnek gerekir. Yani, bu durumda aslında konum gibi yapalım: ... biz istediklerinizi burada

---A---B---C <= Master 
      \ 
      E---F---F---H <= Foo 
          \ 
          J---K---L---M <= Bar 
             \ 
             N---O---P---Q <= Baz 

Ve Neyse ki

---A---B---C <= Master 
      |\ 
      | E---F---F---H <= Foo 
      |\ 
      | J---K---L---M <= Bar 
      \ 
      N---O---P---Q <= Baz 

edilir Git seçenekler bizim için bir çözümü vardır rebase komutu! Bu araçlar bölüme ayrılabilir Ne

git rebase --onto [newParent] [oldParent] [branchToMove] 

: -

  • --ontoşeyin anne değiştir -

    1. rebase Bu, bu alternatif Rebase sözdizimini kullanın için git söyler bayrağı
    2. - Bu, rebasing yaptığınız dalın,
    3. numaralı bağlantıya sahip olduğu daldır.
    4. oldParent - Bu ebeveyn
    5. branchToMove olduğu gibi şu anda rebasing olan şube sahip dalıdır - Bu "eski ebeveyn dalı" hakkında biraz

    olabilir (rebasing) hareket ediyor dalıdır biraz kafa karıştırıcı olun, ama gerçekten ne yapıyor, "rebase yaparken eski ebeveynden gelen değişiklikleri göz ardı et" diyor. oldParent, hareket ettiğiniz şubenin konumunu (örn. branchToMove) ,'u nasıl başlattığınızdır.

    Yani, bizim durumda yürütülecek komutlar nelerdir? Biz sonunda "dal zinciri" nin off her dalını çekmek gerekir, çünkü bu komutları sırası önemli olduğunu

    git rebase --onto Master Bar Baz 
    git rebase --onto Master Foo Bar 
    

    Not.

  • +3

    mümkün olan en iyi anlamda, bunun dışında tüm büyü Alır üzerine yerleştirin. Bunu sadece Foo'da bir çalışma yaptığım bir fubar (baz) bir özellik dalı için kullandım, sonra bazıları Bar'a, sonra biraz daha Foo'ya, ama hepsi aynı taahhüt hattına bağlı. #fail –

    +1

    Mükemmel cevap. –

    +0

    @cdeszaq Düzenlemem çalıştı ama ilki "Foo" olmalıdır Cevabınız geri kalanını ve orijinal soruyu eşleşecek ne oldu emin değilim, ilk şemada iki "Bar" dalları var. – ryanwils

    İlgili konular