Skip to main content

Управление запросами на вытягивание с накоплением

Реструктурируйте запросы на вытягивание с накоплением, перебазируйте ветви и внесите изменения в более низкие слои с помощью GitHub CLI.

Примечание.

Эта функция доступна в публичном предварительном просмотре и может измениться.

При выполнении итерации на стеке часто необходимо вносить изменения в нижний слой, перебазировать, чтобы сохранить линейную историю или изменить структуру ее ветвей. Расширение gh stack обрабатывает GitHub CLI эти задачи с каскадными операциями, которые обновляют каждую затронутую ветвь. См . раздел AUTOTITLE.

Внесение изменений в нижний слой

При работе с верхним слоем и необходимо изменить что-то меньшее в стеке, внесите изменения в ветвь, в которой она принадлежит, а не перебазируете ее на текущем уровне.

  1. Перейдите в ветвь, требующую изменения.

    Shell
    gh stack down
    

    Вы также можете ознакомиться с определенной ветвью.gh stack checkout BRANCH-NAME

  2. Внесите изменения и зафиксируйте его.

    Shell
    git add .
    git commit -m "helpful-commit-message"
    
  3. Перебазировать ветви выше, чтобы получить изменение.

    Shell
    gh stack rebase --upstack
    
  4. Отправьте обновленные ветви и вернитесь к месту работы.

    Shell
    gh stack push
    gh stack top
    

Повторное размещение стека

Перед слиянием стек должен иметь линейную историю между ветвями. Выполнение gh stack rebase выполняет каскадную базу перебазы, где каждая ветвь перебазируется поверх ветви под ней, начиная mainс, поэтому каждая ветвь выбирает последние изменения из всех нижних слоев.

  1. Перебазировать стек. По умолчанию эта ветвь перебазирует каждую ветвь снизу до верхней части.

    Shell
    gh stack rebase
    

    Чтобы ограничить базу повторной базы, используйте --downstack для перебазы с самого низкого уровня до текущей ветви или --upstack для перебазы из текущей ветви до верхней части.

  2. Отправка обновленных ветвей. Это используется --force-with-lease для безопасного обновления перебазированных ветвей.

    Shell
    gh stack push
    

Если перебаза сталкивается с конфликтом, gh stack rebase останавливается и выводится список конфликтующих файлов.

  • Разрешите маркеры в затронутых файлах, наведите их на git addэтап, а затем запустите gh stack rebase --continue.
  • Чтобы начать работу, выполните восстановление gh stack rebase --abort всех ветвей до состояния предварительной базы данных.

Примечание.

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

Перебазирование с GitHub веб-сайта

Если стек не линейный, в поле слияния появится кнопка стека повторной базы данных. При выборе он активирует каскадную базу на стороне сервера, которая:

  1. Перебазирует весь стек поверх последней магистрали, например main.
  2. Перебазирует каждую разъединенную ветвь поверх базовой ветви, работая снизу стека вверх.
  3. Принудительно отправляет каждую перебазированную ветвь, чтобы обновить удаленный.

После завершения повторной базы все запросы на вытягивание отражают обновленные ветви и проверки CI повторно активируются.

Примечание.

Фиксации, созданные серверной повторной базой, не подписаны. Если для репозитория требуются подписанные фиксации, перебазируйте их, GitHub CLIgh stack rebase чтобы фиксации соответствовали конфигурации подписи локальной фиксации Git, а затем отправьте с помощью gh stack push.

Реструктуризация стека

Может потребоваться изменить состав стека. Например, если необходимо удалить ветвь, объединить ветви, вставить ветвь, изменить порядок или переименовать, используйте интерактивную команду gh stack modify.

Перед выполнением gh stack modifyубедитесь в следующем:

  • У вас есть активный стек.
  • Рабочее дерево чисто.
  • Перебаза не выполняется.
  • Запрос на вытягивание не помещается в очередь для слияния.
  • Журнал фиксаций является линейным.
  1. Откройте пользовательский интерфейс терминала изменения.

    Shell
    gh stack modify
    
  2. Выберите ветвь и этап операции. Изменение порядка и структурные изменения (падение, свертка, вставка, переименование) не могут быть смешанными в одном сеансе.

    • x — удаление ветви и ее фиксаций
    • d — сворачивать ветвь в одну под ней
    • u — сложить ветвь в одну над ней
    • i / I — вставьте новую ветвь ниже или выше курсора
    • r — переименование ветви
    • Shift+^ / Shift+ — переупорядочение ветви
    • z — отмена последнего промежуточного действия
  3. Примените промежуточные изменения, сохраняя их. Ничего не изменяется до сохранения.

    Используйте ctrl/cmd+s.

    Если конфликт возникает во время применения, устраните его и запустите или запуститеgh stack modify --continue``gh stack modify --abort, чтобы восстановить предварительно измененное состояние.

  4. Отправьте обновленные ветви и повторно создайте стек GitHub.

    Shell
    gh stack submit
    

Отмена взлома с GitHub веб-сайта

Чтобы растворить стек с веб-сайта, например переупорядочение или переорганизовать его, используйте параметр Unstack в стеке.

Распаковка удаляет открытые, черновики и закрытые запросы на вытягивание из стека. Каждая из них сохраняет текущую базовую ветвь, но больше не связана с другими, а требования к сопоставлению стека и слиянию стека исчезают из них.

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

Чтобы изменить порядок или изменить структуру стека, не растворяя его, используйте gh stack modify команду. См. статью "Реструктуризация стека".

Синхронизация локальной среды после слияния

Когда запрос на вытягивание в нижней части стека объединяется, обновите локальное состояние с помощью одной команды синхронизации. Чтобы автоматически обрезать локальные ветви для объединенных запросов на вытягивание одновременно, добавьте --prune этот параметр.

Shell
gh stack sync --prune

При этом извлекаются последние изменения, выполняется быстрое переадресация магистрали, перебазирование оставшихся ветвей на него, отправка обновленных ветвей и синхронизация состояния запроса на вытягивание.GitHub

Извлечение запросов на вытягивание, добавленных в стек GitHub

Если кто-то другой добавляет запросы на вытягивание в стек GitHub, gh stack sync извлекает новые ветви и добавляет их в локальный стек, чтобы он зеркально отражал удаленный. Очистка удаленного удаленного обновления, как это происходит, автоматически оттягивается, поэтому gh stack sync безопасно выполняться в службе автоматизации.

Разрешение разверленного стека

Локальные и удаленные стеки отличаются, если ни одно из них не является чистым расширением другого, например при добавлении ветви локально, а различные запросы на вытягивание добавляются в тот же стек GitHub. В этом случае gh stack sync не удается объединить два автоматически. В интерактивном терминале он предлагает три варианта:

  • Используйте удаленный стек в качестве источника истины. Заменяет состав локального стека удаленным, извлекая отсутствующие ветви. Если вы находились в ветви, удаленный стек больше не содержит, вы перемещаесь в ближайшую выживающую ветвь. Для этого требуется чистое рабочее дерево без незафиксированных изменений.
  • Удаление стека GitHubв . Удаляет объект GitHub стека и останавливает синхронизацию. Запросы на вытягивание и локальные ветви не связаны. Повторно создайте стек, gh stack submitкоторый также создает запросы на вытягивание для любых ветвей, которые вы еще не отправили. Сначала выполните команду gh stack modify , если вы хотите изменить ее структуру.
  • Отмена. Прерывает синхронизацию без отправки ветвей или обновления запросов на вытягивание.

В неинтерактивном терминале, например CI, расхождение прерывает синхронизацию без отправки ветвей или обновления запросов на вытягивание. Разрешите его путем отмены размещения и повторного восстановления стека.

Дальнейшие действия