git merge уже в курсе, когда его нет

При работе над проектом с использованием git и bitbucket.com существуют следующие ветви:

master
development
uat
production

Когда я начал работу над проектом, я взял клон разработки (естественно, считая, что он содержит современный код). Спустя месяцы работы, и теперь выясняется, что код в производственной ветви (которая в настоящее время выполняется в рабочей среде) имеет более позднюю версию, чем код, который я начал в ветви разработки.

Когда я пытаюсь:

git checkout development
git merge production

там написано "Уже в курсе". Когда я иду:

git diff production..development

он выплевывает множество изменений, которые говорят, что в производственной ветке есть код, которого нет в ветке разработки. Как сделать так, чтобы производственный код сливался с кодом разработки, не стирая месяцы работы?

11 голосов | спросил Warwick Hall 11 MaramTue, 11 Mar 2014 07:57:05 +04002014-03-11T07:57:05+04:0007 2014, 07:57:05

1 ответ


0

Вы можете не хотеть merge, а rebase. То есть, принять сделанные вами коммиты, которые вы добавили в ветку development - те, которые не были там, когда вы в первый раз сделали свой clone, но есть сейчас - и посмотрите, какие изменения были внесены каждым из них по очереди; и примените эти изменения, снова по порядку, поверх ветки production.

(Некоторые из них, вероятно, не будут корректными: изменения в production, которых нет в development будет означать, что некоторые, может быть, многие из внесенных вами изменений должны быть изменены, чтобы соответствовать. Хуже того, изменение одного из ваших изменений почти наверняка повлияет на большую часть вашего изменения, поэтому этот ребаз может быть трудным.)

Тем не менее ... «в актуальном состоянии» не означает, что код один и тот же, в любом случае. Это просто означает, что коммит графа показывает, что нет ничего нового для внесения. Это, в свою очередь, означает, что вы (или кто-то еще) уже сделали слияние. дерево , прикрепленное к окончательному слиянию (результат слияния), - это не то, что вам нужно, но единственное, что может видеть git, - это слияние выполнено. См. Почему после слияния GIT говорит «Уже обновлено», но различия между ветвями все еще существуют? для примера, включающего git revert, например.

ответил torek 11 MaramTue, 11 Mar 2014 10:42:52 +04002014-03-11T10:42:52+04:0010 2014, 10:42:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132