git rebase przy użyciu sourcetree

83

Myślę, że jestem zdezorientowany, jak używać GUI SourceTree do robienia rebase git. Mam dwie gałęzie „master” i „dev”. Jak widać, dwie gałęzie rozeszły się. Chcę wykonać rebase na gałęzi "dev", używając wiersza poleceń, wyglądałoby to tak:

git checkout dev
git rebase master

wprowadź opis obrazu tutaj

Spodziewałbym się, że kliknę prawym przyciskiem myszy „programowanie” i wybierzę „Przebuduj aktualne zmiany na programistę”. Zakładam, że obecne zmiany oznaczają „nowe zatwierdzenia na master”. Ale wybranie tej opcji wydaje się nie mieć żadnego efektu. Jakie byłyby właściwe kroki?

python152
źródło

Odpowiedzi:

119

Ale wybranie tej opcji wydaje się nie mieć żadnego efektu.

Tak, ponieważ obecne zmiany są jedną z obecnych gałęzi, czyli dev.

Rebasing devna szczycie devoznacza brak działania.

git checkout dev
git rebase master

Oznacza to, że: bieżąca gałąź dev: ma zostać ponownie oparta master.

Więc w SourceTree, musisz kliknąć prawym przyciskiem myszy master(gdy devjest wyrejestrowany) i wybrać:

Rebase current changes onto master

Howe dodaje w komentarzach :

Obecna rebase current changes onto [branch]nazwa „ ” jest myląca. Sprawdź tę dyskusję dotyczącą ulepszeńSRCTREE-1578 .

Po tym, jak byłem zaskoczony próbą zaktualizowania gałęzi funkcji do rozwoju i niepowodzeniem, zdałem sobie sprawę, że pozycja menu kontekstowego w lewym okienku oznaczona „ rebase current changes onto $somebranch” w rzeczywistości działa odwrotnie niż sugeruje jej nazwa:
ponownie bazuje na bieżącej gałęzi do stanu $ somebranch;
Innymi słowy, opiera się $somebranchna bieżącej gałęzi (lub do niej), a nie na odwrót. (Dobrze?)

Przyimek „ onto” w aktualnym tekście jest mylący; oznacza to, że przedmiot zdania ( $somebranchw moim przykładzie) otrzyma zmiany.
W rzeczywistości będzie odwrotnie.
Brak nazwy bieżącej gałęzi dodatkowo pogarsza zamieszanie.

Przeformułowanie poprawiające strukturę zdania i zawierające nazwę gałęzi, której dotyczy problem, przyniosłoby ogromne korzyści dla przejrzystości.
Na przykład:

rebase $currentbranch to head of $somebranch
rebase $somebranch onto $currentbranch
VonC
źródło
13
Z kontekstu, głos przeciwny pochodzi od deadman, który opublikował odpowiedź wcześniej, bez zwracania się w ogóle do SourceTree. Głosowałem w dół i wyjaśniłem swoją krytykę w komentarzu. Najwyraźniej deadman nie docenił konstruktywnych uwag, które poczyniłem.
VonC
1
Czy to zmieni gałąź główną? Chciałbym tylko zaktualizować moją gałąź deweloperską o najnowsze zmiany gałęzi głównej - a później połączyć moją gałąź deweloperską w główną. Czy opisany sposób spełni to zadanie?
Gerfried
2
@ Gerfried Zgoda. Dopóki dev nie został popchnięty, możesz zmienić bazę na poziomie master.
VonC,
14
Sourcetree powinno zmienić sformułowanie na „Przebuduj najnowsze zmiany z wersji głównej na deweloperską” dla lepszego wyjaśnienia.
Timo
4
Obecne nazewnictwo „zmiany bieżącej bazy danych na [gałąź]” jest mylące. Sprawdź tę dyskusję dotyczącą ulepszeń: jira.atlassian.com/browse/SRCTREE-1578 .
Zihao Zhao