Обновление веток Git с master

Я 'новичок в Git, и теперь я 'в такой ситуации:

  • У меня есть четыре ветки (master, b1, b2 и b3).
  • После работы над b1-b3 я понял, что мне нужно что-то изменить в ветке master, что должно быть во всех остальных ветках.
  • Я изменил то, что мне нужно в master и... вот моя проблема:

Как мне обновить все остальные ветки кодом ветки master?

Комментарии к вопросу (2)
Решение

У вас есть два варианта:

Первый - слияние, но это создаст дополнительный коммит для слияния.

Проверьте каждую ветвь:

git checkout b1

Затем объедините:

git merge origin/master

Затем push:

git push origin b1

В качестве альтернативы вы можете сделать rebase:

git fetch
git rebase origin/master
Комментарии (7)

У вас есть в основном два варианта:

  1. Вы сливаетесь. Это на самом деле довольно проста, и идеально локальной операции:

ГИТ кассе Б1 ГИТ слияния мастер

повторить для В2 и В3

Это ровно те же самые истории, как это произошло: вы раскошелились от Мастер, Вы внесли изменения во все ветки, и наконец вы были включены изменения из master в всех трех ветвей.

ГИТ может очень хорошо справиться с этой ситуацией, он предназначен для слияния происходит во всех направлениях, в то же время. Вы можете доверять ему удастся сделать правильно все нити вместе. Его просто не волнует, мастер филиала В1 сливает`, илимастерсливаетВ1`, слияния коммита выглядит все же на Git. Разница только в том, что ветка заканчивается, указывающий на эту фиксацию.

  1. Вы перебазироваться. Люди с СВН или подобный фон более интуитивным. Команды аналог в случае слияния:

ГИТ кассе Б1 ГИТ перебазирования мастер

повторить для В2 и В3

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

А --- Б --- С --- Д <-- мастер \ -- Е --- е --- г <-- Б1

Слияние результатов в реальную историю:

А --- Б --- С --- Д <-- мастер \ \ -- Е --- е --- г +-- ч <-- В1

Перебазирование, однако, дает вам эту историю:

А --- Б --- С --- Д <-- мастер \ -- Е' --- Ф' --- г' <-- В1

Дело в том, что совершает Е&#39;, Ф&#39; и G&#39; никогда по-настоящему не существовало, и, вероятно, никогда не были протестированы. Они могут даже не компилироваться. Это на самом деле довольно легко создать бессмысленные совершает через перебазировать, особенно когда изменения в "мастера" имеют важное значение для развития В В1.

Следствием этого может быть, что вы можете'т определить, какой из трех коммитов Е, F и G и на самом деле внедрен регрессии, не уменьшая значение ГИТ пополам.

Я не говорю, что вы должны'т использовать Git для перебазирования. Он его использует. Но всякий раз, когда вы используете его, вы должны быть в курсе того, что вам врут про историю. И вы должны по крайней мере компиляции проверить новые коммиты.

Комментарии (8)

Правильный способ сделать это - git rebase master. Слияние означает, что для слияния будет создан коммит, а пересоздание - нет.

Комментарии (5)

Если вы'вэ работает на ветке на-И-офф, или много уже было в других ветках, пока вы'вэ работает над чем-то, это'ы лучше, чтобы перебазировать свой филиал на мастер. Это сохраняет опрятный истории и делает вещи намного проще.

git checkout master
git pull
git checkout local_branch_name
git rebase master
git push --force # force required if you've already pushed

Примечания:

  • Дон'т перебазирования филиалов, что вы'вэ сотрудничал с другими.
  • Вы должны перебазироваться на ветке, на который вы будете сливать, которые могут не всегда быть хозяином.

Там'С главы о перебазирования в http://git-scm.com/book/ch3-6.html и множество других ресурсов в интернете.

Комментарии (0)

@cmaster сделали лучший разработаны ответа. Вкратце:

git checkout master #
git pull # update local master from remote master
git checkout 
git merge master # solve merge conflicts if you have`

Вы не должны переписывать историю филиал держать их в актуальном состоянии для будущих ссылок. При слиянии с мастером, он создает дополнительной фиксации, но что это дешево. Совершает не стоит.

Комментарии (0)

Для обновления других отраслей, таких как (резервную копию) с вашей ветки master копия. Вы можете сделать следовать в любом случае (rebase или слияния)...

  1. Делать перебазироваться (там выиграл'т быть каких-либо дополнительных коммит к резервной ветке).
  2. Слияние филиалов (взимается дополнительная фиксация автоматически резервное копирование филиал).

Примечание : перебазировать ничего, кроме создания новой базы (новая копия)

ГИТ резервной кассе ГИТ слияния мастер ГИТ пуш

(Повторите для другой ветки если бы backup2 & и т. д..,)

ГИТ резервной кассе ГИТ перебазирования мастер ГИТ пуш

(Повторите для другой ветки если бы backup2 & и т. д..,)

Комментарии (0)

Вы можете объединить, или применить отдельные коммиты в разных ветках с помощью git cherry-pick.

Комментарии (0)

Существует два варианта этой проблемы.

  1. ГИТ перебазирования

  2. ГИТ слияния

Только дифф с выше как в случае слияния, будет иметь дополнительной фиксации в истории

  1. ветке git checkout В(В1,В2,В3)

  2. ГИТ перебазирования происхождения/мастер (в случае конфликта разрешить локально, делая ГИТ перебазирования --продолжения)

  3. ГИТ пуш

Кроме того, вариант слияния Git-это похожие моды

  1. ГИТ кассе "и your_branch" В(В1,В2,В3)

  2. ГИТ слияния мастер

  3. ГИТ пуш

Комментарии (0)