2015-07-06 14 views
8

Chcę zrozumieć nieco więcej na temat git rebase.git rebase do migracji kilku commitów?

Załóżmy, że mam ten przepływ pracy, czy przydałby się tutaj git rebase? A jeśli tak, to jaka byłaby komenda do migracji zatwierdzeń od X do Z (przy założeniu, że nie używa się pick-up) od MASTER do BRANCH.

enter image description here

+0

Czy scalenie nie przyniosłoby w tym przypadku takiego samego rezultatu? – nwinkler

+0

@nwinkler Nie ma znaczenia, czy scala, czy też rebazy z punktu widzenia funkcjonalności kodu. Ale może preferować jeden nad drugim z punktu widzenia przepływu pracy Git. –

Odpowiedz

3

Wierzcie lub nie, ale w rzeczywistości przepisujemy master na branch!

Oto polecenia można użyć do osiągnięcia tego celu:

git checkout master     # checkout the master branch 
git checkout -b newbranch   # create new branch based on master 
git rebase branch     # rebase on 'branch' 

Pamiętaj stworzyłem nowy oddział o nazwie newbranch który pojawi się tak, jak chcesz. Od Ciebie zależy, co chcesz zrobić z oryginalnym branch. Teraz newbranch będzie wyglądać następująco:

A--B--C--D--X--Y--Z 

Bardziej typowy workflow byłoby wprowadzenie nowych zmian od master do branch przez przebazowania ten ostatni na tych pierwszych, czyli:

git checkout branch 
git rebase master 

To pozostawi branch patrząc tak:

A--X--Y--Z--B--C--D 
+0

Dzięki Tim. Załóżmy, że ** branch ** to thread1, ** newbranch ** is threads2. Zastosowałem twoje polecenia i otrzymałem następujący błąd - jakąkolwiek radę? - Przepraszam, nie wiem jeszcze, jak poprawnie przerwać linie w komentarzu. '$ git checkout mistrz Już 'mistrza' $ git checkout -b threads2 przełączony na nowy oddział 'threads2' $ git rebase wątki pochodzenia śmiertelne: Potrzebne pojedynczą zmianę nieważne pochodzenie upstream ' – artm

+0

Co to jest gałąź" wątków "? –

+0

Niestety wątki to wątki1 (oryginalny oddział)> '$ git rebase origin threads1 fatal: Potrzebowałem jednej wersji nieprawidłowy początek źródła" – artm

2

Jeśli zrobić git rebase master (gdy już wyrejestrowany swój oddział), należy odtworzyć zobowiązuje z Branchna szczyciemaster:

A--x--y--z--b'--c'--d' (Branch) 
     | 
     (master) 

Jest to pomocne w celu upewnij się, że lokalny commit Twojego Branch jest nadal kompatybilny z najnowszą wersją z master.
Upewnij się, że nie pchnąłeś jeszcze swojego Branch, ponieważ zmienia on swoją historię.

Zobacz "git workflow and rebase vs merge questions".