Jaki jest najlepszy (i najbezpieczniejszy) sposób na scalenie gałęzi Git z masterem?

Powstaje nowy oddział z master, nazywamy go test.

Jest kilku programistów, którzy albo zobowiązują się do master, albo tworzą inne gałęzie, a później łączą się z master.

Załóżmy, że praca nad test zajmuje kilka dni i chcesz stale aktualizować test za pomocą zatwierdzeń w master.

Zrobiłbym git pull origin master od test.

Pytanie 1: Czy to właściwe podejście? Inni programiści mogli z łatwością pracować na tych samych plikach, co ja.


Moja praca nad test została zakończona i jestem gotowy, aby połączyć ją z powrotem z master. Oto dwa sposoby, o których mogę pomyśleć:

O:

git checkout test
git pull origin master
git push origin test
git checkout master
git pull origin test 

B:

git checkout test
git pull origin master
git checkout master
git merge test

Nie używam --rebase, ponieważ z mojego zrozumienia, rebase otrzyma zmiany z master i nałoży na to moje, dzięki czemu może nadpisać zmiany wprowadzone przez inne osoby.

Pytanie 2: Która z tych dwóch metod jest właściwa? Jaka jest różnica?

Celem tego wszystkiego jest aktualizowanie mojej gałęzi test o wydarzenia z master, a później mogę połączyć je z powrotem w master, mając nadzieję, że oś czasu będzie jak najbardziej liniowa.


person moe    schedule 09.04.2011    source źródło
comment
nie.. rebase nigdy nie nadpisuje, po prostu stara się osiągnąć czystszą historię. przez ponowne dołączenie (lub sfałszowanie) historii do późnego punktu mistrza   -  person Junchen Liu    schedule 23.12.2015
comment
rebase nie nadpisuje Twoich zatwierdzeń. Cofa twoje zatwierdzenia, stosuje zatwierdzenia z gałęzi master do gałęzi testowej, a następnie stosuje twoje zatwierdzenia z powrotem do testu.   -  person zundi    schedule 20.06.2016
comment
A jeśli nie mamy dostępu do zapisu do mastera? Jakiś sposób na zapobieganie konfliktom w gałęzi funkcji? Chyba nie, bo historie pewnie się rozeszły   -  person information_interchange    schedule 22.07.2020


Odpowiedzi (14)


Jak bym to zrobił

git checkout master
git pull origin master
git merge test
git push origin master

Jeśli mam oddział lokalny ze zdalnego, nie czuję się komfortowo z łączeniem innych oddziałów niż ten ze zdalnym. Nie przepychałbym też swoich zmian, dopóki nie będę zadowolony z tego, co chcę wcisnąć, a także nie przepychałbym w ogóle rzeczy, które są tylko dla mnie i mojego lokalnego repozytorium. W Twoim opisie wydaje się, że test jest tylko dla Ciebie? Więc nie ma powodu, żeby to publikować.

git zawsze stara się szanować zmiany Twoje i innych, tak samo będzie --rebase. Nie sądzę, abym mógł to odpowiednio wyjaśnić, więc spójrz na książkę Git - Zmiana bazy lub git-ready: wprowadzenie do zmiany bazy mały opis. To całkiem fajna funkcja

person KingCrunch    schedule 09.04.2011
comment
git merge test daje mi fatal: 'test' does not point to a commit. Muszę poszukać w git log punktu zatwierdzenia w gałęzi testowej, przełączyć się z powrotem do gałęzi master, a następnie wykonać git merge 0f37d3154abbf52a4cbbbb5109f08af6a7567234. - person Duncanmoo; 02.12.2014
comment
@Duncanmoo Cóż, oczywiście gałąź test musi istnieć. Jasne, możesz zamiast tego użyć skrótu zatwierdzenia, ale zwykle łatwiej jest użyć nazwy gałęzi. Wewnętrznie po prostu pobiera skrót HEAD gałęzi. - person KingCrunch; 04.12.2014
comment
@shanyangqu Aby uzyskać najnowsze zmiany z pilota. Jeśli pracujesz sam i tylko z jednym systemem, nie ma problemu. Ale gdy pojawią się zmiany wypchnięte z innego systemu (prawdopodobnie od innego programisty), zobaczysz konflikt, gdy tylko spróbujesz wypchnąć swoje scalenie z powrotem (krok czwarty). Jedynym rozwiązaniem jest teraz scalenie lokalnego mastera ze zdalnym masterem, co kończy się dość brzydkim scalonym masterem z zatwierdzeniem scalania źródła/mastera. Dlatego zawsze dobrze jest wyciągnąć rękę przed fuzją - person KingCrunch; 25.12.2015
comment
Możesz chcieć wypchnąć test, jeśli kopia zapasowa będzie tworzona tylko wtedy, gdy znajduje się na centralnym serwerze git. Jest to szczególnie dobre, jeśli pracujesz na własnym widelcu. - person Jordan Morris; 17.02.2016
comment
pokazuje to zatwierdzenia na fb (gałąź testową) tak, jakby zostały zatwierdzone bezpośrednio do mastera, w przeciwieństwie do pokazywania zatwierdzeń na ich oryginalnym fb, i po prostu scalanie do mastera (jak widać z gitkiem lub w sieci gitlab) - person Joey Baruch; 11.05.2016
comment
Czy nie jest bezpieczniej najpierw scalić źródło/główne z testem przed scaleniem testu z nadrzędnym? Czy powyższe nie sprawi, że test jest nieaktualny? - person ziggy; 17.09.2016
comment
@ziggy Cóż... To zależy. O przepływie pracy. Na przykład wiele zatwierdza tylko funkcje i poprawki błędów w develop i tylko poprawki (i być może ważne poprawki) w master. Następnie przenoszą poprawki z develop do master (technicznie to powiedziałeś). Jeśli jednak nie ma poprawki (co zawsze jest dobre :)), to develop zawsze znajduje się przed master. Więc tak, masz rację, ale w zależności od przepływu pracy może po prostu nie jest to konieczne. (Użyłem tutaj develop, ponieważ jest to bardziej powszechne niż test). - person KingCrunch; 18.09.2016
comment
@sterling Archer łuk i strzała się nie zmieniają, ale cel i strategia mogą się zmienić :-) - person Prasad; 13.11.2016
comment
W twoim opisie wydaje się, że test jest tylko dla ciebie? Więc nie ma powodu, żeby to publikować. Możesz chcieć przekazać oddział lokalny na serwer, jeśli na przykład serwer zapewnia kopię zapasową na wypadek awarii dysku lokalnego lub jeśli nie masz innego sposobu na wykonanie kopii zapasowej. - person Eric; 13.02.2017
comment
-1 Nie wyjaśnia, w którym repozytorium musisz wykonać te polecenia. Zaskakująco wysoki wynik, biorąc pod uwagę, jak bezużyteczny jest. - person Felo Vilches; 03.10.2017
comment
@FeloVilches: Jeśli rozumiesz polecenia, wiesz, na której gałęzi je wykonujesz. - person Nawaz; 03.10.2017
comment
@Nawaz poprawny punkt, ale tytuł mówi safest way, więc nie jestem pewien na ile bezpieczne jest wykonywanie tych poleceń w losowej gałęzi. - person Felo Vilches; 03.10.2017
comment
@FeloVilches: To nie jest gałąź losowa! Bezpieczny czy nie, to zupełnie inna kwestia. Ale to nie to było twoim początkowym zmartwieniem! - person Nawaz; 03.10.2017
comment
@FeloVilches Odpowiedź zaczyna się od git checkout master. Zakładając, że czytasz dane wyjściowe gits, prawdopodobnie jesteś później na master. Możesz nawet bezpiecznie wykonać git checkout master na losowej gałęzi :) - person KingCrunch; 13.11.2017
comment
...Również nie przepychałbym moich zmian, dopóki nie będę zadowolony z tego, co chcę wepchnąć... dlaczego nie popchnąć w celu utworzenia kopii zapasowej kodu, na wypadek gdyby lokalne maszyny umiera i dni wysiłków minęły? - person Rich Steinmetz; 15.08.2018
comment
Ta odpowiedź wydaje mi się błędna. OP pyta, jak aktualizować gałąź testową z wzorcem - a ta odpowiedź pokazuje tylko, jak połączyć test z wzorcem. - person asimovwasright; 16.05.2019
comment
@KingCrunch Czy powinienem usunąć gałąź po połączeniu? - person Oliver D; 12.03.2020
comment
@OliverD Jasne, czemu nie? Jeśli gałąź jest scalona, ​​oznacza to, że zatwierdzenia są teraz obecne w więcej niż 1 gałęzi. Usunięcie gałęzi źródłowej nie spowoduje usunięcia zmian. Z drugiej strony odtworzenie gałęzi to tylko jedna linijka :) git checkout -b foo master - person KingCrunch; 14.03.2020
comment
Jeśli git merge test daje fatal: refusing to merge unrelated histories to git merge test --allow-unrelated-histories działa. - person Upulie Han; 23.10.2020
comment
Jeszcze jedno .. nowy git używa main a nie master - person LonelySoul; 07.02.2021

To bardzo praktyczne pytanie, ale wszystkie powyższe odpowiedzi nie są praktyczne.

Tak jak

git checkout master
git pull origin master
git merge test
git push origin master

Takie podejście ma dwa problemy:

  1. Jest to niebezpieczne, ponieważ nie wiemy, czy są jakieś konflikty między gałęzią testową a gałęzią master.

  2. Spowodowałoby to „ściśnięcie” wszystkich zmian testowych w jedno zatwierdzenie scalające na głównym; to znaczy w gałęzi master, nie możemy zobaczyć wszystkich dzienników zmian gałęzi testowej.

Tak więc, gdy podejrzewamy, że wystąpią jakieś konflikty, możemy mieć następujące operacje git:

git checkout test
git pull 
git checkout master
git pull
git merge --no-ff --no-commit test

Przetestuj merge przed commit, unikaj szybkiego zatwierdzania do --no-ff,

W przypadku napotkania konfliktu możemy uruchomić git status, aby sprawdzić szczegóły dotyczące konfliktów i spróbować rozwiązać

git status

Gdy rozwiążemy konflikty lub jeśli nie ma konfliktu, to commit i push je

git commit -m 'merge test branch'
git push

Ale w ten sposób utracisz historię zmian zarejestrowaną w gałęzi testowej i utrudniłoby innym deweloperom zrozumienie historii projektu.

Więc najlepszą metodą jest użycie rebase zamiast merge (przypuśćmy, że w tym czasie rozwiązaliśmy konflikty gałęzi).

Poniżej znajduje się jeden prosty przykład. Zaawansowane operacje można znaleźć pod adresem http://git-scm.com/book/en/v2/Git-Branching-Rebasing

git checkout master
git pull
git checkout test
git pull
git rebase -i master
git checkout master
git merge test

Tak, kiedy już skończysz, wszystkie commity z gałęzi Test zostaną przeniesione na główkę gałęzi Master. Główną zaletą zmiany bazy jest to, że otrzymujesz liniową i znacznie czystszą historię projektu.

Jedyne, czego musisz unikać to: nigdy nie używaj rebase w gałęzi publicznej, takiej jak gałąź master.

Nigdy nie wykonuj operacji takich jak:

git checkout master
git rebase -i test

Szczegóły dotyczące https://www.atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing

dodatek:

person John Yin    schedule 14.03.2015
comment
jeśli nie masz pewności co do operacji zmiany bazy, zapoznaj się z: git-scm .com/book/pl/v2/Git-Branching-Rebasing - person John Yin; 05.03.2016
comment
Zgadzam się, aby zmienić bazę gałęzi testowej na późniejsze połączenie z masterem. Nawet inne odpowiedzi są poprawne, to zachowa historię zmian testów gałęzi w szefie mastera, ponieważ autor wspomina, że ​​dostajesz liner i znacznie czystszy projekt, który jest celem systemu kontroli wersji. - person le0diaz; 05.05.2016
comment
Stwierdzenie, że nie jest to jeden z bezpiecznych sposobów, ponieważ nie wiemy, czy są jakieś konflikty między gałęzią testową a gałęzią master, nie jest prawdziwe: zawsze można przerwać scalenie. I nawet jeśli nie ma konfliktów, zawsze możesz cofnąć ostatnie zatwierdzenie lokalne, o ile nie zostało ono wypchnięte. Bez prawidłowego zrozumienia git niektóre rzeczy mogą wydawać się nieco przerażające lub niejasne, ale niebezpieczne jest po prostu niepoprawne. Uważaj, aby nie pomylić innych błędnymi informacjami. - person Paul van Leeuwen; 18.08.2016
comment
zgadzam się z @PaulvanLeeuwen, kiedy git scala gałąź testową do mastera, zostaniesz powiadomiony o konfliktach, i tam wkroczysz i scalisz zmiany. Gdy skończysz, zatwierdzisz scalenie i odepchniesz. Jeśli żałujesz lub nie możesz połączyć tego poprawnie, zawsze możesz odrzucić swoją pracę i ponownie oderwać się od mistrza. Więc zdecydowanie nie jest to niebezpieczne.. - person Juan; 09.10.2016
comment
dlaczego rebase -i? - person MushyPeas; 16.06.2017
comment
Zmiana bazy jest z natury bardziej niebezpieczna niż łączenie. Proponowanie zmiany bazy jako bezpieczniejszej opcji łączenia jest błędne. Zmiana bazy jest poprawną strategią, ale zawiera więcej zastrzeżeń, których użytkownik powinien się wystrzegać. - person Ikke; 31.03.2018
comment
Dla tych, którzy mieli konflikty podczas zmiany bazy, możesz rozwiązać konflikty i uruchomić git rebase --continue. Udało mi się pomyślnie scalić moją gałąź deweloperską. Więc teraz można bezpiecznie usunąć gałąź dev, jeśli już jej nie używam? - person Lasithds; 10.05.2019

Ani zmiana bazy, ani scalanie nie powinny zastępować czyichkolwiek zmian (chyba że zdecydujesz się to zrobić podczas rozwiązywania konfliktu).

Typowym podejściem podczas tworzenia jest:

git checkout master
git pull
git checkout test
git log master.. # if you're curious
git merge origin/test # to update your local test from the fetch in the pull earlier

Kiedy będziesz gotowy, aby połączyć się z powrotem w mistrza,

git checkout master
git log ..test # if you're curious
git merge test
git push

Jeśli martwisz się, że coś zepsujesz podczas łączenia, git merge --abort jest dla Ciebie.

Używanie push, a następnie pull jako sposobu łączenia jest głupie. Nie jestem też pewien, dlaczego wypychasz test do źródła.

person raylu    schedule 10.04.2011
comment
Ten proces zwiększy liczbę zatwierdzeń, za każdym razem, gdy przełączasz się między gałęziami, musisz zatwierdzić swoją gałąź. - person iBug; 21.07.2014
comment
Co? Czy mówisz, że zwiększy to liczbę zatwierdzeń za każdym razem, gdy zmienisz gałęzie? A może mówisz, że za każdym razem, gdy zmieniasz gałęzie, musisz zatwierdzić swoją gałąź? Pierwsza jest nieprawdziwa i nie jestem pewna, co oznacza druga. - person raylu; 21.07.2014
comment
przed kasą musisz zatwierdzić branch. to właśnie mówię - person iBug; 22.07.2014
comment
Ty nie: to (jedna z rzeczy), dla których git stash jest. - person msanford; 13.08.2014
comment
Polecam git checkout test; git pull zamiast git merge origin/test. Jeszcze lepiej jest git pull --rebase. W każdym razie zapomniałeś pobrać zmiany, więc przed git merge origin/test powinieneś git fetch origin test (git fetch .. && git merge .. to dokładnie to, co robi git pull .. :)) - person KingCrunch; 25.12.2015
comment
Teoretycznie, jeśli test znajduje się na innym pilocie niż master, tak. Ale ponieważ zazwyczaj masz tylko jednego pilota, pociągnięcie raz aktualizuje oba, a następnie możesz po prostu scalić (lub zmienić bazę). - person raylu; 27.12.2015
comment
Lub możesz zmienić swój ostatni commit (w lokalnym oddziale) i uczynić go idealnym przed pushem. - person whihathac; 14.04.2016

Najpierw chciałbym, aby gałąź, która ma zostać scalona, ​​była jak najczystsza. Uruchom testy, upewnij się, że stan jest taki, jak chcesz. Wyczyść nowe zatwierdzenia za pomocą git squash.

Oprócz odpowiedzi KingCrunches, sugeruję użyć

git checkout master
git pull origin master
git merge --squash test
git commit
git push origin master

Mogłeś zrobić wiele zatwierdzeń w innej gałęzi, która powinna być tylko jednym zatwierdzeniem w gałęzi master. Aby historia zatwierdzeń była tak czysta, jak to tylko możliwe, możesz chcieć zmiażdżyć wszystkie swoje zatwierdzenia z gałęzi testowej w jednym zatwierdzeniu w gałęzi master (zobacz także: Git: Zgniatać czy nie zgniatać?). Następnie możesz również przepisać komunikat zatwierdzenia na coś bardzo ekspresyjnego. Coś, co jest łatwe do odczytania i zrozumienia, bez zagłębiania się w kod.

edytuj: Możesz być zainteresowany

Tak więc na GitHub robię następujące czynności dla gałęzi funkcji mybranch:

Pobierz najnowsze od pochodzenia

$ git checkout master
$ git pull origin master

Znajdź skrót bazy scalania:

$ git merge-base mybranch master
c193ea5e11f5699ae1f58b5b7029d1097395196f

$ git checkout mybranch
$ git rebase -i c193ea5e11f5699ae1f58b5b7029d1097395196f

Teraz upewnij się, że tylko pierwszy to pick, reszta to s:

pick 00f1e76 Add first draft of the Pflichtenheft
s d1c84b6 Update to two class problem
s 7486cd8 Explain steps better

Następnie wybierz bardzo dobrą wiadomość o zatwierdzeniu i wypchnij na GitHub. Następnie wyślij żądanie ściągnięcia.

Po scaleniu żądania ściągnięcia możesz je usunąć lokalnie:

$ git branch -d mybranch

i na GitHubie

$ git push origin :mybranch
person Martin Thoma    schedule 21.04.2016
comment
który powinien być tylko jednym zatwierdzeniem w gałęzi master, cóż niekoniecznie; możesz wekk chcieć zachować historię - person Cocowalla; 12.04.2018
comment
Pewny. Ale wtedy po prostu nie ściskaj commitów - person Martin Thoma; 12.04.2018
comment
Myślę, że --pierwszy rodzic wydaje się być najlepszym rozwiązaniem. davidchudzicki.com/posts/pierwszy-rodzic - person bkribbs; 21.09.2018

Stary wątek, ale nie znalazłem swojej drogi robienia tego. Może to być cenne dla kogoś, kto pracuje z rebase i chce scalić wszystkie zatwierdzenia z gałęzi (funkcji) nad głównym. Jeśli pojawi się konflikt, możesz go rozwiązać przy każdym zatwierdzeniu. Zachowujesz pełną kontrolę w trakcie procesu i możesz przerwać w dowolnym momencie.

Pobierz aktualne informacje o Master i Branch:

git checkout master
git pull --rebase origin master
git checkout <branch_name>
git pull --rebase origin <branch_name>

Połącz gałąź z głównym:

git checkout <branch_name>
git rebase master

Opcjonalnie: jeśli natrafisz na konflikty podczas zmiany bazy:

Najpierw rozwiąż konflikt w pliku. Następnie:

git add .
git rebase --continue

W każdej chwili możesz przerwać rebase za pomocą:

git rebase --abort

Wypchnij swoją zmienioną gałąź:

git push origin <branch_name>

Jeśli masz tę gałąź pchniętą wcześniej, musisz ją zastąpić pchnięciem siłowym:

git push origin -f <branch_name>

Zanim to zrobisz, zawsze sprawdź, czy Twój obecny oddział lokalny odpowiada Twoim oczekiwaniom, ponieważ wymuszenie ma pierwszeństwo przed starym w zdalnym repozytorium.

Teraz masz dwie możliwości:

  • A) Utwórz PR (np. na GitHub) i połącz go tam za pomocą interfejsu użytkownika
  • B) Wróć do wiersza poleceń i połącz gałąź z master
git checkout master
git merge --no-ff <branch_name>
git push origin master

Gotowe.

person Robin Wieruch    schedule 31.10.2018
comment
Ja też lubię ten sposób. Jedną rzeczą, o której zapomniałeś wspomnieć, jest to, że często musisz wymusić wypchnięcie swojej ‹nazwa_oddziału› po zmianie bazy. - person kenecaswell; 30.03.2021

To jest przepływ pracy, którego używam w mojej pracy z zespołem. Scenariusz jest taki, jak opisałeś. Po pierwsze, kiedy skończę pracę nad test, zmieniam bazę z masterem, aby pobrać wszystko, co zostało dodane do mastera w czasie, gdy pracowałem nad gałęzią test.

git pull -r upstream master

Spowoduje to przeniesienie zmian do wzorca, ponieważ rozwidlałeś gałąź test i zastosujesz je, a następnie zastosujesz zmiany, które wprowadziłeś, aby przetestować „na górze” bieżącego stanu wzorca. Mogą wystąpić tutaj konflikty, jeśli inne osoby wprowadziły zmiany w tych samych plikach, które edytowałeś w teście. Jeśli tak, będziesz musiał je naprawić ręcznie i zatwierdzić. Gdy to zrobisz, dobrze będzie przełączyć się na gałąź główną i bez problemu połączyć test z nią.

person djheru    schedule 16.03.2016

git checkout master
git pull origin master
# Merge branch test into master
git merge test

Po scaleniu, jeśli plik zostanie zmieniony, to po scaleniu wystąpi błąd „Rozwiąż konflikt”

Więc musisz najpierw rozwiązać wszystkie swoje konflikty, musisz ponownie zatwierdzić wszystkie swoje zmiany, a następnie popchnąć

git push origin master

Lepiej zrobić, kto dokonał zmian w gałęzi testowej, ponieważ wiedział, jakie zmiany zrobił.

person Vinay Sikarwar    schedule 07.04.2015

Użyłbym metody rebase. Przede wszystkim dlatego, że doskonale oddaje twoją sprawę semantycznie, tj. to, co chcesz zrobić, to odświeżyć stan swojej aktualnej gałęzi i „udawać” tak, jakby był oparty na najnowszej.

Tak więc, nawet nie sprawdzając master, chciałbym:

git fetch origin
git rebase -i origin/master
# ...solve possible conflicts here

Oczywiście samo pobranie ze źródła nie odświeża lokalnego stanu twojego master (ponieważ nie wykonuje scalania), ale jest to całkowicie w porządku dla naszego celu - chcemy uniknąć przełączania się, ze względu na oszczędność czasu.

person user776686    schedule 13.09.2018

Odpowiedź @KingCruncha powinna działać w wielu przypadkach. Jednym z problemów, który może się pojawić, jest to, że możesz być na innym komputerze, który musi pobrać najnowsze dane z testu. Tak więc polecam najpierw wyciągnąć test. Wersja wygląda tak:

git checkout test
git pull
git checkout master
git pull origin master
git merge test
git push origin master
person cgnorthcutt    schedule 28.02.2020

Odpowiem zgodnie z gałęziami deweloperskimi i funkcjonalnymi,

jeśli jesteś na gałęzi funkcji i chcesz ją zaktualizować za pomocą programisty, użyj poniższych poleceń:

git checkout develop
git pull
git checkout feature/xyz
git merge develop

Teraz Twoja feature/xyz jest zaktualizowana o gałąź develop i możesz przekazać swoje zmiany do zdalnego feature/xyz.

person omkar    schedule 20.05.2020

Ponieważ tytuł mówi „Najlepszy sposób”, myślę, że dobrym pomysłem jest rozważenie strategii łączenia cierpliwości.

Od: https://git-scm.com/docs/merge-strategies

Dzięki tej opcji „merge-recursive” spędza trochę więcej czasu, aby uniknąć błędów scalania, które czasami występują z powodu nieistotnych pasujących wierszy (np. nawiasów klamrowych z różnych funkcji). Użyj tego, gdy gałęzie, które mają zostać połączone, rozchodzą się gwałtownie. Zobacz także git-diff[1] --cierpliwość.

Stosowanie:

git fetch
git merge -s recursive -X patience origin/master

Alias ​​Gita

Zawsze używam do tego aliasu, np. uruchomione raz:

 git config --global alias.pmerge 'merge -s recursive -X patience'

Teraz możesz zrobić:

git fetch
git pmerge origin/master
person Julian    schedule 16.11.2019

Musisz mieć wyrejestrowaną gałąź, aby ściągnąć, ponieważ ciągnięcie oznacza połączenie z głównym i potrzebujesz drzewa roboczego, aby się z nim połączyć.

git checkout master
git pull

Nie musisz się najpierw wymeldowywać; rebase robi słuszną rzecz z dwoma argumentami

git rebase master test  

git checkout master
git merge test

git push domyślnie wypycha wszystkie gałęzie, które istnieją tutaj i na zdalnym

git push
git checkout test
person Masoud Mokhtari    schedule 15.11.2019

To jest z GitLab: po prostu postępuj zgodnie z instrukcjami:

tu wpisz opis obrazu

person shdr    schedule 05.12.2019
comment
W step-1 wyewidencjonujesz jakąś gałąź funkcji, a w step-2 ponownie wyrejestrujesz gałąź główną. Jestem zdezorientowany, po co w ogóle sprawdzać gałąź funkcji? Proszę wytłumacz - person Muhammad Tariq; 17.01.2021
comment
Dzieje się tak dlatego, że w tym scenariuszu najpierw wykonuje się pobieranie z gałęzi funkcji pochodzenia (zdalnego). po tym, aby połączyć funkcję z masterem, musisz pobrać master i połączyć z nim funkcję. - person shdr; 18.01.2021
comment
W takim razie w pierwszym przypadku git fetch origin feature nie powinno być drugim poleceniem po sprawdzeniu zdalnej gałęzi funkcji do synchronizacji lokalnej z funkcją zdalną? - person Muhammad Tariq; 18.01.2021

Zawsze dostaję konflikty scalania, gdy robię tylko git merge feature-branch. Wydaje mi się, że to działa dla mnie:

git checkout -b feature-branch

Wprowadź kilka zmian w kodzie...

git merge -s ours master 
git checkout master
git merge feature-branch

or

git checkout -b feature-branch

Wprowadź kilka zmian w kodzie...

git checkout master
git merge -X theirs feature-branch
person mchavezi    schedule 27.09.2020