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