"git pull" или "git merge" между основной веткой и веткой разработки
У меня есть мой master
филиал и develop
ветка для работы над несколькими изменениями. Мне нужно объединить изменения из master
в develop
, но в конечном итоге объединит все из develop
в master
, Я имею в виду два разных рабочих процесса:
git pull origin master
вdevelop
веткаgit merge master
вdevelop
ветка
Какой лучший способ сделать это и почему?
6 ответов
Будьте осторожны с ребазой. Если вы делитесь своей веткой разработки с кем-либо, rebase может создать беспорядок. Rebase хорош только для ваших местных отделений.
Правило большого пальца, если вы выдвинули ветку в начало координат, не используйте rebase. Вместо этого используйте слияние.
Этот рабочий процесс работает лучше всего для меня:
git checkout -b develop
... внести некоторые изменения...
... мастер уведомлений обновлен...
... внести изменения, чтобы развиваться...
git checkout master
git pull
... вернуть эти изменения в развитие...
git checkout develop
git rebase master
... внести еще некоторые изменения...
... поручить им развивать...
... объединить их в мастера...
git checkout master
git pull
git merge develop
Лучший подход для такого рода вещей, вероятно, git rebase
, Он позволяет вам перенести изменения из master в вашу ветку разработки, но оставить всю вашу работу по разработке "поверх" (позже в журнале коммитов) материала из master. Когда ваша новая работа будет завершена, слияние с мастером будет очень простым.
Если вы ни с кем не делитесь веткой разработки, то я просто перебазировал бы ее каждый раз, когда мастер обновлялся, таким образом у вас не будет коммитов слияния по всей вашей истории, как только вы вернете разработку обратно в мастер. Рабочий процесс в этом случае будет следующим:
> git clone git://<remote_repo_path>/ <local_repo>
> cd <local_repo>
> git checkout -b develop
....do a lot of work on develop
....do all the commits
> git pull origin master
> git rebase master develop
Вышеуказанные шаги гарантируют, что ваша ветвь разработки всегда будет в курсе последних изменений из основной ветки. Как только вы закончили с веткой разработки, и она вернулась к последним изменениям в master, вы можете просто слить ее обратно:
> git checkout -b master
> git merge develop
> git branch -d develop
Мое эмпирическое правило таково:
rebase
для веток с тем же именем,merge
иначе.
примеры для тех же имен будут master
, origin/master
а также otherRemote/master
,
если develop
существует только в локальном хранилище, и оно всегда основано на origin/master
совершить, вы должны назвать это master
и работать там напрямую. это упрощает вашу жизнь и представляет вещи такими, какие они есть на самом деле: вы непосредственно развиваете master
ветка.
если develop
общедоступен, не должен быть перебазирован на master
Слился обратно с --no-ff
, вы развиваете на develop
, master
а также develop
иметь разные имена, потому что мы хотим, чтобы они были разными, и оставались отдельными. не делайте их такими же rebase
,
Я предпочитаю использовать
git pull origin <branch_name>
перейти к той ветке, с которой я хочу слиться. Я на самом деле никогда не использовал
git merge <branch_name>
Причина, у меня была ошибка с ним в GitLab, когда я начинал его использовать. Но теперь это тоже более логично ... потому что
git pull
делает: (а)
git fetch
(б)
git merge
2 команды против одной; делает это простым приложением для быстрой работы.
PS: если вы не уверены, что может произойти, возможно, лучше использовать команды «разбитый» прямо там;)