Слияние нескольких веток с помощью git - PullRequest
24 голосов
/ 13 марта 2011

У меня есть 2 локальных филиала, которые называются «разработка» и «мастер»;они подобны.На сервере моей компании есть одно "основное" репо (производство) и несколько веток, которые были сделаны другими разработчиками:

$ git branch -a
* develop
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/some-test
  remotes/origin/feature1
  remotes/origin/feature2
  remotes/origin/master

Как я могу объединить remotes/origin/feature1 и remotes/origin/feature2 в мою локальную "главную" веткускопировать все это в "разработку" и начать работать с реальным кодом в моей "разработке" ветке?

Ответы [ 2 ]

35 голосов
/ 13 марта 2011
  1. git checkout master
  2. git pull origin feature1 feature2
  3. git checkout develop
  4. git pull . master (или возможно git rebase ./master)

Первая команда изменяет текущую ветвь на master.

Вторая команда извлекает изменения из удаленных ветвей feature1 и feature2.Это слияние «осьминога», поскольку оно объединяет более 2 веток.Вы также можете сделать два обычных слияния, если хотите.

Третья команда переключает вас обратно на ветку develop.

Четвертая команда переносит изменения с локального master на * 1027.*.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: Обратите внимание, что git pull автоматически сделает fetch, поэтому вам не нужно делать это вручную.Это в значительной степени эквивалентно git fetch, за которым следует git merge.

9 голосов
/ 13 марта 2011

Я бы просто "выбрал" все источники:

git fetch origin

теперь, когда в вашем репо вы можете объединить ветки в мастер:

git checkout master

git merge origin/feature1 

git merge origin/feature2 

теперь вы можете объединитьмастер разработки

git checkout develop
git merge master 

если вы собираетесь зафиксировать исходную точку, тогда я бы настроил локальную ветвь отслеживания, чтобы вы могли иметь локальный доступ и сразу перейти к исходной точке:

git branch --track origin/feature1 feature1
...