Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы может все еще выполняться. Актуальные сведения см. в документации на английском языке.

Сведения о слиянии запросов на вытягивание

Вы можете объединить запросы на вытягивание, сохранив все фиксации в ветви компонента, объединив все фиксации в одну фиксацию или перераспределив отдельные фиксации из ветви head в ветвь base.

Слияние фиксаций

Если щелкнуть параметр по умолчанию Объединить запрос на вытягивание в экземпляр GitHub Enterprise Server, все фиксации из ветвь компонента добавляются в базовая ветвь в фиксации слияния. Запрос на вытягивание объединяется с помощью параметра --no-ff.

Чтобы объединить запросы на вытягивание, необходимо иметь разрешения на запись в репозиторий.

Схема стандартного потока слияния и фиксации, где фиксации из ветвь компонента и дополнительная фиксация слияния добавляются в main.

Слияние фиксаций со сжатием

При выборе параметра Squash и merge в запросе на вытягивание в экземпляр GitHub Enterprise Server фиксации запроса на вытягивание сдавляются в одну фиксацию. Вместо просмотра всех отдельных фиксаций участника из ветви раздела фиксации объединяются в одну фиксацию, а также выполняется их слияние в ветвь по умолчанию. Запросы на вытягивание со сжатыми фиксациями объединяются с помощью параметра перемотки вперед.

Для слияния со сжатием запросов на вытягивание необходимо иметь разрешения на запись в репозитории, а для репозитория должно быть разрешено слияние со сжатием.

Схема сжатия фиксаций, на которой несколько фиксаций из ветвь компонента объединяются в одну фиксацию, которая добавляется в main.

Для создания оптимизированного журнала Git в репозитории можно использовать слияние со сжатием. Фиксации, выполняемые в процессе работы, удобны при работе с ветвью компонентов, но они могут быть не важны для сохранения в журнале Git. Если при слиянии в ветвь по умолчанию эти фиксации будут сжаты в одну фиксацию, вы можете сохранить исходные изменения в четком журнале Git.

Сообщение слияния для слияния со сжатием

Когда вы выполняете слияние со сжатием, GitHub создает сообщение о фиксации по умолчанию, которое можно изменять. В зависимости от конфигурации репозитория и количества фиксаций в запросе на вытягивание, не включая фиксации слияния, это сообщение может включать заголовок запроса на вытягивание, описание запроса на вытягивание или информацию о фиксациях.

Количество фиксацийСводкаОписание
Одна фиксацияЗаголовок сообщения фиксации для одной фиксации плюс номер запроса на вытягиваниеОсновной текст сообщения фиксации для одной фиксации
Несколько фиксацийЗаголовок запроса на вытягивание плюс номер запроса на вытягиваниеСписок сообщений фиксации для всех сжимаемых фиксаций, упорядоченный по датам

Люди с доступом координатора или администратора к репозиторию могут настроить сообщение слияния своего репозитория по умолчанию для всех фиксаций со сжатием, чтобы использовать заголовок запроса на вытягивание, заголовок запроса на вытягивание и сведения о фиксации или заголовок запроса на вытягивание и описание. Дополнительные сведения см. в разделе Настройка сжатия фиксаций для запросов на вытягивание.

Сжатие и слияние длительной ветви

Если после слияния запроса на вытягивание вы планируете продолжить работу с головной ветвью запроса на вытягивание, запрос на вытягивание лучше не сжимать и не выполнять его слияние.

При создании запроса на вытягивание GitHub определяет последнюю фиксацию, которая присутствует и в головной, и в базовой ветви: фиксацию общего предка. При сжатии и слиянии запроса на вытягивание GitHub создает в базовой ветви фиксацию, которая содержит все изменения, внесенные в головной ветви после фиксации общего предка.

Поскольку эта фиксация присутствует только в базовой ветви, а в головной отсутствует, общий предок двух ветвей остается неизменным. Если вы продолжаете работать в головной ветви, создайте новый запрос на вытягивание между двумя ветвями. Он будет включать все фиксации после общего предка, включая фиксации, которые вы сжали и объединили в предыдущем запросе на вытягивание. Если конфликтов нет, эти фиксации можно безопасно объединить. Однако такой рабочий процесс повышает вероятность возникновения конфликтов слияния. Если вы будете и дальше сжимать и объединять запросы на вытягивание для длительной головной ветви, вам придется многократно разрешать одни и те же конфликты.

Перемещение между ветвями и слияние фиксаций

При выборе параметра Перебазировать и объединить в запросе на вытягивание в экземпляр GitHub Enterprise Server все фиксации из ветви раздела (или головной ветви) добавляются в базовую ветвь по отдельности без фиксации слиянием. Таким образом, поведение перебазирования и объединения напоминает объединение с перемоткой вперед путем сохранения журнала линейных проектов. Однако повторное размещение достигается путем повторной записи журнала фиксаций в базовой ветви с новыми фиксациями.

Поведение повторного размещения и объединения для GitHub Enterprise Server немного отклоняется от git rebase. Повторное создание и объединение в GitHub всегда обновляет сведения об авторе фиксации и создает новые фиксации SHA, тогда как git rebase за пределами GitHub не изменяет сведения об авторе фиксации при повторном размещении поверх фиксации предка. Дополнительные сведения о процессе git rebase см. в разделе git-rebase в документации Git.

Для повторного размещения с объединением запросов на вытягивание необходимо иметь разрешения на запись в репозитории, а для репозитория должно быть разрешено слияние со сжатием.

Визуальное представление git rebase см. в разделе "Ветвление Git. Повторное размещение" из _книги_Pro Git.

Вы не можете автоматически перебазировать и объединить экземпляр GitHub Enterprise Server, если:

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

Если вы по-прежнему хотите перебазировать фиксации, но не можете автоматически перебазировать и объединить данные в экземпляр GitHub Enterprise Server, выполните следующие действия:

  • Переместите тематическую (или головную) ветвь в базовую ветвь локально в командной строке.
  • Устраните все конфликты слияния в командной строке.
  • Принудительно отправьте перемещенные фиксации в тематическую (или удаленную головную) ветвь запроса на вытягивание.

Любой пользователь с разрешениями на запись в репозитории может затем объединить изменения с помощью кнопки "Перебазировать и объединить" на экземпляр GitHub Enterprise Server.

Непрямые слияния

Запрос на вытягивание можно объединить автоматически, если его головная ветвь прямо или косвенно объединена с базовой ветвью извне. Другими словами, если фиксация кончика головной ветви становится доступной из кончика целевой ветви. Пример:

  • Ветвь main находится на момент фиксации C.
  • Ветвь feature была ветвлена main от и в настоящее время находится на фиксации D. Эта ветвь имеет запрос на вытягивание, предназначенный для main.
  • Ветвь feature_2 отделяется от feature и теперь находится на фиксации E. Эта ветвь также имеет запрос на вытягивание, предназначенный для main.

Если сначала выполняется слияние запроса на вытягивание E --> main, запрос на вытягивание D --> main будет помечен как объединенный автоматически, так как все фиксации из feature теперь доступны из .main Слияние feature_2 и main отправка main на сервер из командной строки помечают оба запроса на вытягивание как объединенные.

Запросы на вытягивание в этой ситуации будут помечены как merged , даже если правила защиты ветвей не были выполнены.

Дополнительные материалы