2012-06-11 29 views
8

f'I posiadać:git pochodzenie zmiana oddziału (rebase)

A---B---C-----D-- branch dev 
    \--C'-E-/  branch test 

Zrobiłem to złe: C i C”są prawie takie same rewizje, byłoby bardziej sensowne, czy mogę zrobić oddział Test początek na C, zamiast B.

Jak mogłem to zrobić ?, Chyba rebase, ale nie jestem pewien, jak go używać, thx

edit: nie wyczyść co chciałbym:

A---B---C-----D-- branch dev 
     \-E-/  branch test 

lub

A - B - D - E - D, jeśli nie jest możliwe

Odpowiedz

8

Można rebase go na szczycie tymczasowego oddziału (z C)
Apostolskiej git rebase i Rebasing, plus git branch.

git branch tmp C 
git checkout test 

# rebase the current branch (test) on top of tmp 
git rebase tmp 

git branch -d tmp 

To powinno dać wam:

A---B---C-----D--  branch dev 
     \--C''-E'-/  branch test 

Zostawiłem C '(tutaj jako C ''), ponieważ C' nie jest dokładnie samo niż C.
Ale jak ams komentarze, jeśli potrzebujesz C”ma, byś

git rebase -i tmp 

to by uzyskać możliwość interaktywną rebase, co pozwala całkowicie usunąć C', odtwarzając tylko E na wierzchu C.

+0

ale muszę usunąć C”, a następnie przechowywać tylko E w innym oddziale, to tylko ważne zobowiązanie –

+0

Nie jestem pewien, dlaczego @VonC zostawił tam 'C'''. Jak rozumiem, "C" powinno być całkowicie usunięte. Jeśli nie, możesz użyć 'git rebase -i tmp' i usunąć linię z' C'' na nim. – ams

+1

Również wykonanie tego rebase sprawi, że branch 'test' będzie wyglądał lepiej, ale stara wersja będzie kontynuowana w historii' D', co nie powinno Cię obchodzić. Jeśli 'dev' jest lokalną gałęzią, której nikt jeszcze nie widział, możesz również" git reset "na' C' i ponowić scalenie. – ams

6

Można rebase tylko kawałek, który ma na C:

A---B---C-----D-- branch dev 
    \ 
     C'-E--  branch test 

# git rebase --onto [new base] [starting after this commit] [ending at this commit] 
git rebase --onto C C' E 

A---B---C-----D-- branch dev 
     \ 
      E--  branch test 

To samo pojęcie jak cherry-picking, z wyjątkiem test wskaźnik oddział porusza się wraz z rebased zobowiązuje.

(Zauważ, że C „popełnić będzie nieosiągalny po rebase, ale można wrócić do niego z git reflog.)

+0

Muszę być na test w oddziale, aby to zrobić? Już połączyłem test z dev –

+0

Dla flagi '--onto', nie ma znaczenia, w której gałęzi się znajdujesz, ponieważ mówisz dokładnie, co masz zrobić:" Zacznij od tego, przenieś wszystko na to do tego ". Nie jestem pewien, co masz na myśli przez "scalony test z dev". – ellotheth

+0

E dołącza do D, D jest połączeniem dwóch gałęzi –