Слияние фиксаций
Если щелкнуть параметр по умолчанию Объединить запрос на вытягивание в экземпляр GitHub Enterprise Server, все фиксации из ветвь компонента добавляются в базовая ветвь в фиксации слияния. Запрос на вытягивание объединяется с помощью параметра --no-ff
.
Чтобы объединить запросы на вытягивание, необходимо иметь разрешения на запись в репозиторий.
Слияние фиксаций со сжатием
При выборе параметра Squash и merge в запросе на вытягивание в экземпляр GitHub Enterprise Server фиксации запроса на вытягивание сдавляются в одну фиксацию. Вместо просмотра всех отдельных фиксаций участника из ветви раздела фиксации объединяются в одну фиксацию, а также выполняется их слияние в ветвь по умолчанию. Запросы на вытягивание со сжатыми фиксациями объединяются с помощью параметра перемотки вперед.
Для слияния со сжатием запросов на вытягивание необходимо иметь разрешения на запись в репозитории, а для репозитория должно быть разрешено слияние со сжатием.
Для создания оптимизированного журнала 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
, даже если правила защиты ветвей не были выполнены.