Слияние фиксаций
Если щелкнуть параметр по умолчанию Объединить запрос на вытягивание в ваше предприятие, все фиксации из ветви компонента добавляются в базовую ветвь в фиксации слияния. Запрос на вытягивание объединяется с помощью параметра --no-ff
.
Чтобы объединить запросы на вытягивание, необходимо иметь разрешения на запись в репозиторий.
Слияние фиксаций со сжатием
При выборе параметра Squash и merge в запросе на вытягивание в ваше предприятие фиксации запроса на вытягивание сдавляются в одну фиксацию. Вместо просмотра всех отдельных фиксаций участника из ветви раздела фиксации объединяются в одну фиксацию, а также выполняется их слияние в ветвь по умолчанию. Запросы на вытягивание со сжатыми фиксациями объединяются с помощью параметра перемотки вперед.
Для слияния со сжатием запросов на вытягивание необходимо иметь разрешения на запись в репозитории, а для репозитория должно быть разрешено слияние со сжатием.
Для создания оптимизированного журнала Git в репозитории можно использовать слияние со сжатием. Фиксации, выполняемые в процессе работы, удобны при работе с ветвью компонентов, но они могут быть не важны для сохранения в журнале Git. Если при слиянии в ветвь по умолчанию эти фиксации будут сжаты в одну фиксацию, вы можете сохранить исходные изменения в четком журнале Git.
Сообщение слияния для слияния со сжатием
Когда вы выполняете слияние со сжатием, GitHub создает сообщение фиксации по умолчанию, которое можно изменять. Сообщение по умолчанию зависит от количества фиксаций в запросе на вытягивание, не включая фиксации слияния.
Количество фиксаций | Сводка | Описание |
---|---|---|
Одна фиксация | Заголовок сообщения фиксации для одной фиксации плюс номер запроса на вытягивание | Основной текст сообщения фиксации для одной фиксации |
Несколько фиксаций | Заголовок запроса на вытягивание плюс номер запроса на вытягивание | Список сообщений фиксации для всех сжимаемых фиксаций, упорядоченный по датам |
Количество фиксаций | Сводка | Описание |
---|---|---|
Одна фиксация | Заголовок сообщения фиксации для одной фиксации плюс номер запроса на вытягивание | Основной текст сообщения фиксации для одной фиксации |
Несколько фиксаций | Заголовок запроса на вытягивание плюс номер запроса на вытягивание | Список сообщений фиксации для всех сжимаемых фиксаций, упорядоченный по датам |
Сжатие и слияние длительной ветви
Если после слияния запроса на вытягивание вы планируете продолжить работу с головной ветвью запроса на вытягивание, запрос на вытягивание лучше не сжимать и не выполнять его слияние.
При создании запроса на вытягивание GitHub определяет последнюю фиксацию, которая присутствует и в головной, и в базовой ветви: фиксацию общего предка. При сжатии и слиянии запроса на вытягивание GitHub создает в базовой ветви фиксацию, которая содержит все изменения, внесенные в головной ветви после фиксации общего предка.
Поскольку эта фиксация присутствует только в базовой ветви, а в головной отсутствует, общий предок двух ветвей остается неизменным. Если вы продолжаете работать в головной ветви, создайте новый запрос на вытягивание между двумя ветвями. Он будет включать все фиксации после общего предка, включая фиксации, которые вы сжали и объединили в предыдущем запросе на вытягивание. Если конфликтов нет, эти фиксации можно безопасно объединить. Однако такой рабочий процесс повышает вероятность возникновения конфликтов слияния. Если вы будете и дальше сжимать и объединять запросы на вытягивание для длительной головной ветви, вам придется многократно разрешать одни и те же конфликты.
Перемещение между ветвями и слияние фиксаций
При выборе параметра Перебазировать и объединить в запросе на вытягивание в ваше предприятие все фиксации из ветви раздела (или головной ветви) добавляются в базовую ветвь по отдельности без фиксации слиянием. Таким образом, поведение перебазирования и объединения напоминает объединение с перемоткой вперед путем сохранения журнала линейных проектов. Однако повторное размещение достигается путем повторной записи журнала фиксаций в базовой ветви с новыми фиксациями.
Поведение повторного размещения и объединения для GitHub AE немного отклоняется от 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
.
Если сначала выполняется слияние запроса на вытягивание E --> main
, запрос на вытягивание D --> main
будет помечен как объединенный автоматически, так как все фиксации из feature
теперь доступны из .main
Слияние feature_2
и main
отправка main
на сервер из командной строки помечают оба запроса на вытягивание как объединенные.
Запросы на вытягивание в этой ситуации будут помечены как merged
, даже если правила защиты ветвей не были выполнены.