#git
#git
Вопрос:
Изначально моя локальная ветка master такая же, как origin / master. представьте следующее:
-
изначально
мастер: a->b
источник / главный сервер: a->b
-
origin / master еще один коммит
мастер: a->b
источник / главный сервер: a->b-> c
-
обработайте еще один коммит
мастер: a->b-> d
источник / главный сервер: a->b-> c
-
новая ветвь с мастера
мастер: 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
orgit cherry-pick
для переноса коммитов d и e на master, разрешайте любые конфликты с помощью commit c.
Как правило, рекомендуется избегать работы непосредственно с главной веткой. Используйте функциональные ветви, регулярно выполняйте git pull --rebase
над ними синхронизацию с мастером и объединяйте только со свежевыделенным мастером.