Git ветвление / перебазирование хороших практик - PullRequest
9 голосов
/ 08 апреля 2010

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

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

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

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

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

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

I.
1. Подтвердите изменение в MyBranchLocal
2. Перепроверьте MyBranch против Master
3. Перепроверьте MyBranchLocal против MyBranch
4. Объедините MyBranch с MyBranchLocal

II.
1. Подтвердите изменение в MyBranchLocal
2. Объедините MyBranch с MyBranchLocal
3. Перепроверьте MyBranch против Master
4. Перебазируйте MyBranchLocal против MyBranch

III.
1. Подтвердите изменение в MyBranchLocal
2. Перепроверьте MyBranch против Master
3. Объедините MyBranch с MyBranchLocal
4. Перебазируйте MyBranchLocal против MyBranch

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

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

Ответы [ 2 ]

4 голосов
/ 09 апреля 2012

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

4 голосов
/ 08 апреля 2010

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

  1. Подтвердить изменение в MyBranchLocal
  2. Перебазировать MyBranchLocal против MyBranch
  3. Слияние MyBranch с MyBranchLocal (должно быть ускорено) - MyBranch = Local
  4. Перебазировать MyBranch против Master
    1. (необязательно) Merge Master с MyBranch (также должно быть ускорено)
  5. Перебазировать MyBranchLocal против MyBranch
...