"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.