Skip to main content

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вы не можете автоматически перебазировать и объединить, когда:

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

Если вы по-прежнему хотите перебазировать фиксации, но не можете перебазировать и объединить автоматически, необходимо:

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

Затем любой пользователь с разрешениями на запись в репозитории может объединить изменения с помощью кнопки перебазы и слияния.

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

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

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

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

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

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

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

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