Mam swój master
oddział i develop
oddział do pracy nad kilkoma zmianami. I trzeba scalić zmiany od master
do develop
, ale w końcu połączyć wszystko od develop
do master
. Mam na myśli dwa różne przepływy pracy:
git pull origin master
dodevelop
oddziaługit merge master
dodevelop
oddziału
Jaki jest najlepszy sposób na to i dlaczego?
git pull
=git fetch
+git merge FETCH_HEAD
Odpowiedzi:
Ostrożnie z rebase. Jeśli udostępniasz swoją gałąź rozwoju komukolwiek, rebase może zrobić bałagan. Rebase jest dobry tylko dla twoich lokalnych oddziałów.
Ogólna zasada, jeśli przesunąłeś gałąź do początku, nie używaj bazy. Zamiast tego użyj scalenia.
źródło
git push origin rebasedBranch --force
korzystać z prywatnego repozytorium? Jedynym użytkownikiem jest ja.Ten przepływ pracy działa najlepiej dla mnie:
... dokonaj zmian ...
... wzorzec powiadomień został zaktualizowany ...
... zatwierdzaj zmiany, by się rozwijać ...
... przywróć te zmiany do rozwoju ...
... dokonaj kilku zmian ...
... zobowiązać ich do rozwoju ...
... scalić je w mistrza ...
źródło
git pull
tuż przed finałemgit merge develop
. Jaki jest tego cel?git pull --rebase origin master
w twojej gałęzi rozwoju jest trochę szybszy.Prawdopodobnie najlepsze podejście do tego rodzaju rzeczy
git rebase
. Pozwala na ściągnięcie zmian z master do gałęzi programistycznej, ale całą pracę programistyczną pozostaw „na wierzchu” (później w dzienniku zatwierdzeń) rzeczy z master. Po zakończeniu nowej pracy scalenie z powrotem do mistrza jest wtedy bardzo proste.źródło
develop
nie jest udostępniany nikomu innemu.develop
jest udostępniany innym współautorom, w jaki sposób zaktualizowalibyśmy się,develop
gdy niektóre poprawki zostały przekazane bezpośrednio domaster
? Czy powinniśmy wykonać scalenie, tj.git checkout master && git pull --rebase && git checkout develop && git merge master
? Zostawiłem komentarz do wyżej głosowanej odpowiedzi powyżej, która również opisuje tę obawę.Jeśli nie dzielisz się gałęzią rozwijania z nikim, to po prostu będę ją zmieniał za każdym razem, gdy master zostanie zaktualizowany, w ten sposób nie będziesz mieć zatwierdzeń scalania w całej swojej historii, kiedy scalisz rozwój z powrotem w master. W tym przypadku przepływ pracy wyglądałby następująco:
Powyższe kroki zapewnią, że twoja gałąź rozwoju będzie zawsze na bieżąco z najnowszymi zmianami z gałęzi master. Po zakończeniu tworzenia gałęzi i ponownym wprowadzeniu zmian do master możesz po prostu scalić:
źródło
moją ogólną zasadą jest:
Przykładami takich samych nazwach byłoby
master
,origin/master
iotherRemote/master
.jeśli
develop
istnieje tylko w lokalnym repozytorium i zawsze jest oparte na ostatnimorigin/master
zatwierdzeniu, powinieneś go wywołaćmaster
i pracować bezpośrednio tam. upraszcza twoje życie i przedstawia rzeczy takimi, jakie są w rzeczywistości: rozwijasz się bezpośrednio w Interneciemaster
branży.jeśli
develop
jest udostępniony, nie należy go ponownie włączaćmaster
, po prostu ponownie się z nim łączy--no-ff
. rozwijasz siędevelop
.master
idevelop
mają różne nazwy, ponieważ chcemy, aby były różnymi rzeczami i pozostały osobne. nie róbcie tego samego zrebase
.źródło