"git pull" или "git merge" между ведущими и ветвями разработки
У меня есть ветвь master
и ветвь develop
для работы над несколькими изменениями. Мне нужно объединить изменения с master
в develop
, но в итоге будет слить все из develop
в master
. У меня есть два разных рабочих процесса:
-
git pull origin master
в ветку develop
-
git merge master
в ветку develop
Каков наилучший способ сделать это и почему?
Ответы
Ответ 1
Будьте осторожны с rebase. Если вы делитесь своей веткой развития с кем угодно, rebase может испортить вещи. Rebase хорош только для ваших собственных локальных ветвей.
Правило большого пальца, если вы поместили ветвь в начало, не используйте rebase. Вместо этого используйте слияние.
Ответ 2
Этот рабочий процесс работает лучше всего для меня:
git checkout -b develop
... внести некоторые изменения...
... Мастер уведомлений обновлен...
... зафиксировать изменения для разработки...
git checkout master
git pull
... вернуть эти изменения в развитие...
git checkout develop
git rebase master
... внести некоторые изменения...
... обязуйте их развиваться...
... объединить их в мастер...
git checkout master
git pull
git merge develop
Ответ 3
Лучший подход для такого рода вещей, вероятно, git rebase
. Это позволяет вам вытаскивать изменения из мастера в вашу ветку разработки, но оставляйте все ваши разработки "поверх" (позже в журнале фиксации) материала от мастера. Когда ваша новая работа будет завершена, слияние с мастером будет очень простым.
Ответ 4
Если вы не делитесь веткой развития с кем-либо, тогда я бы просто переустанавливал ее каждый раз, когда мастер обновлялся, так что у вас не будет слияния на протяжении всей истории после того, как вы объедините развитие в мастер. Рабочий процесс в этом случае будет следующим:
> 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
Вышеуказанные шаги обеспечат, чтобы ваша ветка разработки всегда находилась на вершине последних изменений от основной ветки. После того, как вы закончите работу с веткой, и она будет восстановлена до последних изменений на мастере, вы можете просто слить ее обратно:
> git checkout -b master
> git merge develop
> git branch -d develop
Ответ 5
мое эмпирическое правило:
rebase
для ветвей с тем же именем, merge
в противном случае.
примеры для тех же имен будут master
, origin/master
и otherRemote/master
.
если develop
существует только в локальном репозитории, и он всегда основан на недавнем фиксации origin/master
, вы должны называть его master
и работать там напрямую. это упрощает вашу жизнь и представляет такие вещи, какие они есть на самом деле: вы непосредственно развиваетесь в ветке master
.
если develop
является общим, его нельзя переустанавливать на master
, просто слив обратно в него с помощью --no-ff
. вы развиваетесь на develop
. master
и develop
имеют разные имена, потому что мы хотим, чтобы они были разными и оставались раздельными. не делайте их одинаковыми с rebase
.