Дополнительно
Обновление веток Git с master
Я 'новичок в Git, и теперь я 'в такой ситуации:
- У меня есть четыре ветки (master, b1, b2 и b3).
- После работы над b1-b3 я понял, что мне нужно что-то изменить в ветке master, что должно быть во всех остальных ветках.
- Я изменил то, что мне нужно в
master
и... вот моя проблема:
Как мне обновить все остальные ветки кодом ветки master
?
624
8
У вас есть два варианта:
Первый - слияние, но это создаст дополнительный коммит для слияния.
Проверьте каждую ветвь:
Затем объедините:
Затем push:
В качестве альтернативы вы можете сделать rebase:
У вас есть в основном два варианта:
ГИТ кассе Б1 ГИТ слияния мастер
повторить для В2 и В3
Это ровно те же самые истории, как это произошло: вы раскошелились от Мастер, Вы внесли изменения во все ветки, и наконец вы были включены изменения из master в всех трех ветвей.
ГИТ
может очень хорошо справиться с этой ситуацией, он предназначен для слияния происходит во всех направлениях, в то же время. Вы можете доверять ему удастся сделать правильно все нити вместе. Его просто не волнует, мастер филиалаВ1
сливает`, или
мастерсливает
В1`, слияния коммита выглядит все же на Git. Разница только в том, что ветка заканчивается, указывающий на эту фиксацию.ГИТ кассе Б1 ГИТ перебазирования мастер
повторить для В2 и В3
Людям нравится этот подход, поскольку он сохраняет линейную историю во всех филиалах. Однако, это линейная история-это ложь, и вы должны знать, что это. Рассмотрим этот коммит график:
А --- Б --- С --- Д <-- мастер \ -- Е --- е --- г <-- Б1
Слияние результатов в реальную историю:
А --- Б --- С --- Д <-- мастер \ \ -- Е --- е --- г +-- ч <-- В1
Перебазирование, однако, дает вам эту историю:
А --- Б --- С --- Д <-- мастер \ -- Е' --- Ф' --- г' <-- В1
Дело в том, что совершает
Е'
,Ф'
иG'
никогда по-настоящему не существовало, и, вероятно, никогда не были протестированы. Они могут даже не компилироваться. Это на самом деле довольно легко создать бессмысленные совершает через перебазировать, особенно когда изменения в "мастера" имеют важное значение для развития ВВ1
.Следствием этого может быть, что вы можете'т определить, какой из трех коммитов
Е
,F
иG
и на самом деле внедрен регрессии, не уменьшая значениеГИТ пополам
.Я не говорю, что вы должны'т использовать
Git для перебазирования
. Он его использует. Но всякий раз, когда вы используете его, вы должны быть в курсе того, что вам врут про историю. И вы должны по крайней мере компиляции проверить новые коммиты.Правильный способ сделать это -
git rebase master
. Слияние означает, что для слияния будет создан коммит, а пересоздание - нет.Если вы'вэ работает на ветке на-И-офф, или много уже было в других ветках, пока вы'вэ работает над чем-то, это'ы лучше, чтобы перебазировать свой филиал на мастер. Это сохраняет опрятный истории и делает вещи намного проще.
Примечания:
Там'С главы о перебазирования в http://git-scm.com/book/ch3-6.html и множество других ресурсов в интернете.
@cmaster сделали лучший разработаны ответа. Вкратце:
Вы не должны переписывать историю филиал держать их в актуальном состоянии для будущих ссылок. При слиянии с мастером, он создает дополнительной фиксации, но что это дешево. Совершает не стоит.
Для обновления других отраслей, таких как (резервную копию) с вашей ветки master копия. Вы можете сделать следовать в любом случае (rebase или слияния)...
Примечание : перебазировать ничего, кроме создания новой базы (новая копия)
(Повторите для другой ветки если бы backup2 & и т. д..,)
(Повторите для другой ветки если бы backup2 & и т. д..,)
Вы можете объединить, или применить отдельные коммиты в разных ветках с помощью git cherry-pick.
Существует два варианта этой проблемы.
ГИТ перебазирования
ГИТ слияния
Только дифф с выше как в случае слияния, будет иметь дополнительной фиксации в истории
ветке git checkout В(В1,В2,В3)
ГИТ перебазирования происхождения/мастер (в случае конфликта разрешить локально, делая ГИТ перебазирования --продолжения)
ГИТ пуш
Кроме того, вариант слияния Git-это похожие моды
ГИТ кассе "и your_branch" В(В1,В2,В3)
ГИТ слияния мастер
ГИТ пуш