Pracuję nad nową funkcją w nowej gałęzi, a z boku wprowadziłem sporo zmian w mojej gałęzi master.
Czy jest możliwe scalenie gałęzi głównej z moją nową gałęzią, aby była aktualna, tak że nie będę mieć zbyt wielu konfliktów scalania po zakończeniu nowej funkcji?
git
version-control
merge
branch
mnml
źródło
źródło
Odpowiedzi:
Możesz albo
git merge master
albogit rebase master
, w tym przypadku wolałbym git rebase .Ponieważ
git rebase
sprawia, że zmiany w gałęzi funkcji zostały wprowadzone na podstawie zmian w gałęzi głównej, co upraszcza wykres wersji.Rebase
Biorąc przykład z instrukcji git rebase ,
git rebase master
w gałęzifeature
:Jest jednak
git rebase
odpowiedni tylko wtedy, gdy gałąź nie została rozdzielona, lub będzie zamieszanie i dodatkowe prace w dół, ponieważ stare zatwierdzenia A, B, C są teraz zastępowane nowymi zatwierdzeniami A ', B', C ', plus F i G, których wcześniej nie było.Rzeczywisty wynik po
git rebase master
oddzialefeature
jest następujący:Zobowiązania A, B, C zwisają po zmianie, ale są osiągalne przez
git reflog feature
.Łączyć
Jeśli ktoś wyciągnął twoją gałąź lub gdzieś ją pchnąłeś, powinieneś się w nią połączyć, aby uniknąć zamieszania i dodatkowej pracy po drugiej stronie. Zobacz Odzyskiwanie z bazy danych upstream .
Jest to wynik
git merge master
w gałęzifeature
:Alternatywnie, jeśli jesteś
git merge feature
w oddzialemaster
, wyglądałoby to tak:źródło
git rebase master
, a ona „wprowadzi zmiany” zmian w gałęzi funkcji, tak aby były one „oparte” na zmianach w gałęzi głównej. Jeśli zmiany w gałęzi głównej są sprzeczne ze zmianami w gałęzi funkcji, git poprosi cię o ich rozwiązanie i kontynuowanie, pominięcie ich lub przerwanie. Jeśli nie masz pewności, możesz wypróbować gałąź testową, aby ją wypróbowaćgit checkout -b test-feature feature
(zakładając, że gałąź funkcji nosi nazwę „funkcja”).git rebase
czy inaczej , należy go używać tylko wtedy, gdy gałąź nie została rozpowszechniona, co, jak zakładam, miało miejsce, ponieważ powiedziałeś, że jest to nowa gałąź, przepraszam za to. Zobacz Odzyskiwanie z wcześniejszej bazy w dokumentach, z którymi się łączyłem. Zamiast tego będziesz musiał użyćgit merge
. I możesz użyć,git reflog
aby znaleźć poprzednią gałąź oddziału, jeśli chcesz ją odzyskać.