Mam dwie gałęzie mianowicie master
a development
w GitHub repozytorium. Cały rozwój robię w branży programistycznej, jak pokazano.
git branch development
git add *
git commit -m "My initial commit message"
git push -u origin development
Teraz chcę scalić wszystkie zmiany w development
gałęzi z master
. Moje obecne podejście to:
git checkout master
git merge development
git push -u origin master
Daj mi znać, jeśli procedura, którą wykonuję, jest prawidłowa.
git pull -u
ustawia śledzenie w górę dla gałęzi (lub wszystkich gałęzi, jeśli przekazujesz więcej niż jedną). Po ustawieniu śledzenie będzie się powtarzać. Nie ma powodu, aby używać go w sposób ciągły.Odpowiedzi:
Zasadniczo lubię łączyć
master
się zdevelopment
pierwszym, aby w razie konfliktów rozwiązać problem wdevelopment
samej gałęzi imaster
zachować czystość.Nie ma dużej różnicy między tymi dwoma podejściami, ale czasami zauważyłem, że nie chcę jeszcze scalać gałęzi
master
, po ich połączeniu, lub że jest jeszcze wiele do zrobienia, zanim można je połączyć , więc zwykle pozostawiammaster
nietknięte do końca.EDYCJA: Z komentarzy
Jeśli chcesz śledzić, kto i kiedy dokonał scalenia, możesz użyć
--no-ff
flagi podczas scalania, aby to zrobić. Jest to na ogół przydatne tylko podczas łączeniadevelopment
wmaster
(ostatni krok), ponieważ może być konieczne wielokrotne scaleniemaster
wdevelopment
(pierwszy krok) w przepływie pracy, a utworzenie dla nich węzła zatwierdzania może nie być bardzo przydatne.źródło
--no-ff
Aby to naprawić, potrzebny jest wyraźny komunikat dotyczący scalenia z master.--no-ff
jest. :)git merge --no-ff development
tylko w celu poprawienia użycia @ elect.A->B->C
będzie panem iA->X->Y
jest twoją gałęzią programistów. Jeśli zmienisz część pliku, wX
której mogły wystąpić konflikty ze zmianąA
, nie będzie to konfliktem, ponieważA
jest on przodkiemX
. Jeśli chodzi o utracone zmiany, sprawdź stackoverflow.com/questions/7147680/..., aby odzyskać wszelkie zmiany.Osobiście moje podejście jest podobne do twojego, z kilkoma dodatkowymi gałęziami i trochę zgniatania zatwierdzeń, kiedy wracają do mistrza.
Jeden z moich współpracowników nie lubi tak bardzo zmieniać gałęzi i pozostaje w gałęzi programistycznej z czymś podobnym do poniższego wykonywanym z gałęzi programistycznej.
Pierwszy wiersz upewnia się, że ma jakieś zatwierdzenia poprzedzające, które zostały wprowadzone do masteringu od czasu ostatniej aktualizacji jego lokalnego repozytorium.
Drugi ciągnie te zmiany (jeśli występują) z mistrza do rozwoju
Trzeci przesuwa gałąź programistyczną (teraz w pełni scaloną z master) do origin / master.
Być może jego podstawowy obieg pracy jest trochę niepoprawny, ale to jest jego główna zaleta.
źródło
rebase
aby zaktualizowaćdev
gałąźmerge
.Wyjaśnienie z dołu dla tych, którzy przybyli tutaj bez znajomości gałęzi.
Zaczynasz tworzyć nowy oddział w ten sposób:
1) Klonuj repozytorium w swoim lokalnym katalogu (lub utwórz nowe repozytorium):
2) Utwórz nowy oddział. Będzie zawierał najnowsze pliki z twojego repozytorium oddziału głównego
3) Zmień obecną gałąź git na new_branch
4) Wykonuj kodowanie, zatwierdza, jak zwykle…
5) Po zakończeniu pracy w tym oddziale połącz z odgałęzieniem „master”:
Aktualizacja: Gorąco polecam użyć GitKraken, aby zobaczyć wizualne drzewo zmian i lepiej zobaczyć całą logikę i zatwierdzenia.
źródło
release
gałąź naszejdevelop
. Następnie dodano plik informacji o wersji i zatwierdzono. Następnie zakończyłem wydanie, które łączy się z powrotem do obumaster/develop
. ale moja gałąź główna zawierała tylko nową informację o wydaniu. żadne inne pliki podczas poprzednich zatwierdzeń programistycznych nie zostały w nim zaktualizowane.Byłoby wspaniale, gdybyś mógł użyć przepływu pracy Git Flow . Może łatwo łączyć rozwój gałęzi z mistrzem.
To, co chcesz zrobić, to po prostu postępować zgodnie z instrukcją git-flow wspomnianą tutaj:
KROKI:
git flow release start <version_number>
git flow release finish <version_number>
git push
aby opublikować zmiany w zdalnym systemie głównym .Aby uzyskać więcej informacji, odwiedź stronę - http://danielkummer.github.io/git-flow-cheatsheet/
źródło
źródło
Tak, jest to poprawne, ale wygląda na bardzo podstawowy przepływ pracy, w którym buforujesz zmiany, zanim będą gotowe do integracji. Powinieneś przyjrzeć się bardziej zaawansowanym przepływom pracy obsługiwanym przez git. Może ci się spodobać podejście do gałęzi tematu , które pozwala pracować równolegle nad wieloma funkcjami, lub podejście stopniowe, które nieco rozszerza bieżący przepływ pracy.
źródło
Jeśli korzystasz z komputera Mac lub Ubuntu, przejdź do folderu roboczego oddziału. W terminalu
załóżmy, że harisdev jest nazwą gałęzi.
jeśli istnieją nieśledzone lub niezaangażowane pliki, pojawi się błąd i musisz zatwierdzić lub usunąć wszystkie nieśledzone lub niezaangażowane pliki.
Ostatnie polecenie, aby usunąć gałąź.
źródło
Krok 1
Utwórz i przełącz się na nową gałąź „dev”, w której lokalne pliki git są zsynchronizowane ze zdalną, ale gałąź „dev” jeszcze nie istnieje.
Krok 2
Wprowadź zmiany w gałęzi „dev” (bieżącej, jeśli wykonasz krok 1), zatwierdź i pchnij je do zdalnej gałęzi „dev”.
Krok 3
Scal swoją gałąź „dev” w „master”.
źródło
Tak zwykle to robię. Po pierwsze, upewnij się, że jesteś gotowy, aby scalić swoje zmiany w master.
git fetch
git checkout master
.git pull
git merge development
git push -u origin master
i gotowe.Więcej informacji na temat łączenia git można znaleźć w tym artykule.
źródło
1) W rozwoju oddziału sprawdź status git za pomocą następującego polecenia:
Nie powinno być nieprzydzielonego kodu. Jeśli tak, wciśnij kod w gałęzi programistycznej:
2) W gałęzi Programowanie uruchom następujące dwa polecenia:
Spowoduje to wypchnięcie kodu gałęzi rozwoju do gałęzi master.
źródło
-f
nie jest zalecane.Na podstawie @Sailesh i @DavidCulp:
Pierwsze polecenie upewni się, że wszystkie wcześniejsze zatwierdzenia zostały wykonane dla zdalnego mistrza, z odpowiedzią Sailesh, która by się nie zdarzyła.
Drugi wykona scalenie i stworzy konflikty, które możesz następnie rozwiązać.
Po wykonaniu tej czynności możesz w końcu dokonać transakcji wzorca, aby przełączyć się na wzorzec.
Następnie scalasz gałąź rozwoju z lokalnym wzorcem. Flaga no-ff utworzy węzeł zatwierdzania w systemie głównym, aby śledzenie całego scalenia było możliwe.
Następnie możesz zatwierdzić i pchnąć swoje scalenie.
Ta procedura upewni się, że istnieje połączenie zatwierdzania przez programistę do opanowania, które ludzie mogą zobaczyć, a następnie, jeśli przejdą do gałęzi programistycznej, zobaczą poszczególne zatwierdzenia dokonane w tej gałęzi podczas jej rozwoju.
Opcjonalnie możesz zmienić zatwierdzenie scalania przed wypchnięciem go, jeśli chcesz dodać podsumowanie tego, co zostało zrobione w gałęzi programistycznej.
EDYCJA: moja oryginalna odpowiedź sugerowała, że
git merge master
nic nie zrobiłem, lepiej zrobićgit merge FETCH_HEAD
po pobraniu źródła / wzorcaźródło
Po „przejściu” do działu rozwoju ...
źródło
Jeśli używasz gerrit, poniższe polecenia działają doskonale.
Możesz zapisać przy pomocy domyślnej wiadomości zatwierdzenia. Upewnij się, że identyfikator zmiany został wygenerowany. Aby się upewnić, możesz użyć następującego polecenia.
Następnie naciśnij następujące polecenie.
Może pojawić się komunikat o błędzie, taki jak poniżej.
Aby rozwiązać ten problem, administrator projektu gerrit musi utworzyć w gerrit inne odwołanie o nazwie „refs / for / refs / heads / master” lub „refs / for / refs / heads / *” (które obejmie wszystkie gałęzie w przyszłości). Następnie udzielić zezwolenia „Push Merge Commit” na to odniesienie i uprawnienia „Prześlij”, jeśli jest to wymagane do przesłania GCR.
Teraz spróbuj ponownie wykonać powyższe polecenie push i powinno działać.
Kredyty:
https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit
https://stackoverflow.com/a/21199818/3877642
źródło
Myślę, że najłatwiejszym rozwiązaniem byłoby
To także zachowuje historię wszystkich używanych gałęzi
źródło
źródło
pull
jeszcze raz. Ponadto nie jest jasne, jaką wartość ta odpowiedź dodaje w porównaniu z istniejącymi odpowiedziami.