2011-09-29 18 views
10

mam trzy oddziały A, B i C. B jest regularnie połączone w Cgit - scalanie różnicę oddziałów

  o---o---o A 
     /
--------o---o---o---o---o---o B 
     \  \  \ \ 
      o---o---o---o---o---o C 

Teraz chcę scalić zmiany ja w C, ale bez scala z B, na górze A. Jaki jest najłatwiejszy sposób na zrobienie tego w git?

+1

Do którego oddział chciałbyś je połączyć? –

+1

chce go na szczycie A – CharlesB

+1

Nie doprowadziłoby to do sytuacji, w której masz zatwierdzenia Q, W (gałąź C), E, ​​R (gałąź B) - scalenie - T, Y (gałąź C) i po prostu wybranie Q, W, T, Y z oddziału C spowoduje zerwanie rzeczy z powodu braku kodu z E, R (który prawdopodobnie T, Y bazuje na)? –

Odpowiedz

8

Użyj git rebase.

pierwsze, zmieniają bazę swój C na górze B:

git checkout C 
git checkout -b rebasedC#Let's do a new branch for it also, just in case 
git rebase B 

to miejsce wszystkich C zobowiązuje się do B. Teraz chcemy przeszczep oddziału rebasedC z B do A:

git rebase --onto A B rebasedC 

Teraz masz swoje C-commity na górze A w gałęzi rebasedC. Teraz możesz szybko przekazać A do tego:

git checkout A 
git merge rebasedC 
git branch -d rebasedC# I don't think you would need it. 

To wszystko, mam nadzieję.

+1

jak to się pozbyć scaleń B wykonanych w C? – CharlesB

+3

Rebase to robi. Następnie przenosisz commity na B, oczywiście C nie potrzebuje już scaleń, więc są odrzucane. – kan

+2

Próbowałem już z moim gitem, teraz mam strukturę drzewa: http://files.rsdn.ru/20380/git.png (gałąź A jest tutaj nazywana "master"). – kan

1

Możesz wypróbować łaty nie scalające C cherry-picking C. Przygotuj się na konflikty związane z łączeniem. :)

Powiązane problemy