как перебазировать ветку с разошедшегося мастера?

#git

#git

Вопрос:

Изначально моя локальная ветка master такая же, как origin / master. представьте следующее:

  1. изначально

    мастер: a->b

    источник / главный сервер: a->b

  2. origin / master еще один коммит

    мастер: a->b

    источник / главный сервер: a->b-> c

  3. обработайте еще один коммит

    мастер: a->b-> d

    источник / главный сервер: a->b-> c

  4. новая ветвь с мастера

    мастер: a->b-> d

    новая ветка: a-> b-> d-> e

    источник / главный сервер: a->b-> c

Я попытался перебазировать ветку master в origin / master, я ожидал, что журнал новой ветки будет a-> b-> c-> d-> e. Но вместо этого журнал новой ветки по-прежнему a-> b-> d-> e, почему это?

Комментарии:

1. Не могли бы вы, пожалуйста, написать команды, которые вы выдавали между / после опубликованных вами состояний ветви, чтобы мы могли видеть, где вы поняли что-то не так? Кроме того: вы уверены, что хотите перебазировать только master против origin/master ? Что с newbranch ? Для этого вам, вероятно, понадобится rebase --onto . (Только для одного коммита reset cherry-pick , как предлагает 9000, часто быстрее.)

Ответ №1:

Что бы я сделал:

  • Перемотайте локальный мастер к последнему нерасходящемуся коммиту b: git checkout master; git reset b
  • Извлеките удаленный мастер: git pull origin master ; это приведет к перебазированию на c.
  • Используйте git merge or git cherry-pick для переноса коммитов d и e на master, разрешайте любые конфликты с помощью commit c.

Как правило, рекомендуется избегать работы непосредственно с главной веткой. Используйте функциональные ветви, регулярно выполняйте git pull --rebase над ними синхронизацию с мастером и объединяйте только со свежевыделенным мастером.