Git ветвь функции rebase портит коммиты в запросе pull для разработки / master ветки - PullRequest
5 голосов
/ 15 января 2020

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

  • Мастер-ветвь: то, что находится в работе, может содержать исправления
  • Develop-ветвь: ветвь, которую мои разработчики используют для создания запросов на извлечение to
  • feature-ветки: ветвь, которую мы создаем для функции, которую реализует разработчик.

Как только разработчик завершил свою работу, он создает запрос на извлечение в ветке разработки. После одобрения мы добавляем ветвь возможностей в ветвь разработки, чтобы не включать все коммиты, сделанные разработчиком в ветке компонентов. Это позволяет нам иметь четкую и чистую историю git в ветви разработки.

Иногда ветке Feature требуется перебазирование из ветки Develop, и здесь начинается проблема. Когда мы перебазируем ветку Feature с веткой Develop, внезапно происходит много коммитов из ветки Develop. включены в запрос на извлечение.

Как этого избежать, чтобы PR включал только фактические коммиты из ветви функций?

1 Ответ

2 голосов
/ 15 января 2020

Я подозреваю, что это происходит после того, как вы перебазируете разработку из master после выпуска исправления.

Рассмотрим следующий сценарий:

master   A->B->C
                \
develop          D
                  \
feature A          E

Затем вы получаете исправление в master, F и перебазируете develop с него. ReBase создает «новый» коммит (D ') с другим ha sh, поэтому с точки зрения git D и D' - это два отдельных и не связанных коммитов. D все еще существует, и C является его родителем, но он больше не включен на develop - только на feature A:

master   A->B->C->F
                \  \
develop          \  D'
                  \
feature A          D->E

Так что если вы затем попытаетесь отменить feature A off develop, если вы не сделаете интерактивную перебазировку, git не сможет распознать, что D и D 'являются одним и тем же коммитом, и вы получите следующее:

master   A->B->C->F
                   \
develop             D'
                     \
feature A             D->E

Чтобы обойти это, при перебазировании feature A из develop, сделайте это в интерактивном режиме и скажите git, чтобы вы отбросили D, поскольку вы знаете, что оно идентично D '.

...