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?

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.