Git разветвление/перераспределение передового опыта

У меня есть следующий сценарий:

3 ветки:
- Мастер
- MyBranch отделился от мастера с целью разработки новой функции системы
- MyBranchLocal отделил MyBranch как мою локальную копию ветки

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

Как владелец ветки MyBranch, я хочу, чтобы он синхронизировался с Master путем перезагрузки. Мне также необходимо объединить изменения, которые я делаю в MyBranchLocal с MyBranch.

Каков хороший способ сделать это?

Пара возможных сценариев, которые я пробовал до сих пор:

я.
1. Зафиксируйте изменение в MyBranchLocal
2. Восстановите MyBranch против Master
3. Восстановите MyBranchLocal против MyBranch
4. Слияние MyBranch с MyBranchLocal

II.
1. Зафиксируйте изменение в MyBranchLocal
2. Слияние MyBranch с MyBranchLocal
3. Восстановите MyBranch против Master
4. Rebase MyBranchLocal против MyBranch

III.
1. Зафиксируйте изменение в MyBranchLocal
2. Восстановите MyBranch против Master
3. Слияние MyBranch с MyBranchLocal
4. Rebase MyBranchLocal против MyBranch

Я уже знаю, что сценарий III, по-видимому, много вовлекает историю фиксации, потенциально дублируя коммиты.

Каков ваш опыт? Какие сценарии вы рекомендуете минимизировать слияние усилий и сохранить историю чистой?

Ответ 1

Мое личное предложение. Это сосредоточено на том, чтобы иметь прямую историю фиксации и проваливать "более конкретные" ветки (вам лучше испортить локальную ветвь, чем ветвь функции).

  • Заменить изменение в MyBranchLocal
  • Rebase MyBranchLocal против MyBranch
  • Слияние MyBranch с MyBranchLocal (должно быть быстро переадресовано) - MyBranch = Local
  • Rebase MyBranch против мастера
    • (необязательно) Merge Master с MyBranch (также должен быть быстро переадресован)
  • Rebase MyBranchLocal против MyBranch

Ответ 2

Я нашел этот вопрос после ссылки на Линус электронной почты. Согласно электронной почте - вы не должны переустанавливать после публикации своей истории на каком-то публичном сайте, потому что вы можете уничтожить историю других людей. Итак, rebase для MyBranchLocal в порядке, но для MyBranch (совместно с другими разработчиками) нет.