Примечание.
Эта функция доступна в публичном предварительном просмотре и может измениться.
При выполнении итерации на стеке часто необходимо вносить изменения в нижний слой, перебазировать, чтобы сохранить линейную историю или изменить структуру ее ветвей. Расширение gh stack обрабатывает GitHub CLI эти задачи с каскадными операциями, которые обновляют каждую затронутую ветвь. См . раздел AUTOTITLE.
Внесение изменений в нижний слой
При работе с верхним слоем и необходимо изменить что-то меньшее в стеке, внесите изменения в ветвь, в которой она принадлежит, а не перебазируете ее на текущем уровне.
-
Перейдите в ветвь, требующую изменения.
Shell gh stack down
gh stack downВы также можете ознакомиться с определенной ветвью.
gh stack checkout BRANCH-NAME -
Внесите изменения и зафиксируйте его.
Shell git add . git commit -m "helpful-commit-message"
git add . git commit -m "helpful-commit-message" -
Перебазировать ветви выше, чтобы получить изменение.
Shell gh stack rebase --upstack
gh stack rebase --upstack -
Отправьте обновленные ветви и вернитесь к месту работы.
Shell gh stack push gh stack top
gh stack push gh stack top
Повторное размещение стека
Перед слиянием стек должен иметь линейную историю между ветвями. Выполнение gh stack rebase выполняет каскадную базу перебазы, где каждая ветвь перебазируется поверх ветви под ней, начиная mainс, поэтому каждая ветвь выбирает последние изменения из всех нижних слоев.
-
Перебазировать стек. По умолчанию эта ветвь перебазирует каждую ветвь снизу до верхней части.
Shell gh stack rebase
gh stack rebaseЧтобы ограничить базу повторной базы, используйте
--downstackдля перебазы с самого низкого уровня до текущей ветви или--upstackдля перебазы из текущей ветви до верхней части. -
Отправка обновленных ветвей. Это используется
--force-with-leaseдля безопасного обновления перебазированных ветвей.Shell gh stack push
gh stack push
Если перебаза сталкивается с конфликтом, gh stack rebase останавливается и выводится список конфликтующих файлов.
- Разрешите маркеры в затронутых файлах, наведите их на
git addэтап, а затем запуститеgh stack rebase --continue. - Чтобы начать работу, выполните восстановление
gh stack rebase --abortвсех ветвей до состояния предварительной базы данных.
Примечание.
Вы также можете активировать перебазу на стороне сервера из запроса на вытягивание, но эти фиксации не подписаны. Если для репозитория требуются подписанные фиксации, перебазируйте их, GitHub CLI чтобы фиксации следовали конфигурации подписи локальной фиксации Git.
Перебазирование с GitHub веб-сайта
Если стек не линейный, в поле слияния появится кнопка стека повторной базы данных. При выборе он активирует каскадную базу на стороне сервера, которая:
- Перебазирует весь стек поверх последней магистрали, например
main. - Перебазирует каждую разъединенную ветвь поверх базовой ветви, работая снизу стека вверх.
- Принудительно отправляет каждую перебазированную ветвь, чтобы обновить удаленный.
После завершения повторной базы все запросы на вытягивание отражают обновленные ветви и проверки CI повторно активируются.
Примечание.
Фиксации, созданные серверной повторной базой, не подписаны. Если для репозитория требуются подписанные фиксации, перебазируйте их, GitHub CLIgh stack rebase чтобы фиксации соответствовали конфигурации подписи локальной фиксации Git, а затем отправьте с помощью gh stack push.
Реструктуризация стека
Может потребоваться изменить состав стека. Например, если необходимо удалить ветвь, объединить ветви, вставить ветвь, изменить порядок или переименовать, используйте интерактивную команду gh stack modify.
Перед выполнением gh stack modifyубедитесь в следующем:
- У вас есть активный стек.
- Рабочее дерево чисто.
- Перебаза не выполняется.
- Запрос на вытягивание не помещается в очередь для слияния.
- Журнал фиксаций является линейным.
-
Откройте пользовательский интерфейс терминала изменения.
Shell gh stack modify
gh stack modify -
Выберите ветвь и этап операции. Изменение порядка и структурные изменения (падение, свертка, вставка, переименование) не могут быть смешанными в одном сеансе.
x— удаление ветви и ее фиксацийd— сворачивать ветвь в одну под нейu— сложить ветвь в одну над нейi/I— вставьте новую ветвь ниже или выше курсораr— переименование ветви- Shift+^ / Shift+↑ — переупорядочение ветви
z— отмена последнего промежуточного действия
-
Примените промежуточные изменения, сохраняя их. Ничего не изменяется до сохранения.
Используйте ctrl/cmd+s.
Если конфликт возникает во время применения, устраните его и запустите или запустите
gh stack modify --continue``gh stack modify --abort, чтобы восстановить предварительно измененное состояние. -
Отправьте обновленные ветви и повторно создайте стек GitHub.
Shell gh stack submit
gh stack submit
Отмена взлома с GitHub веб-сайта
Чтобы растворить стек с веб-сайта, например переупорядочение или переорганизовать его, используйте параметр Unstack в стеке.
Распаковка удаляет открытые, черновики и закрытые запросы на вытягивание из стека. Каждая из них сохраняет текущую базовую ветвь, но больше не связана с другими, а требования к сопоставлению стека и слиянию стека исчезают из них.
Объединенные и очередные запросы на вытягивание остаются в стеке. После объединения запроса на вытягивание или в очереди для слияния в составе стека его невозможно отменить. Стек растворяется полностью только в том случае, если ни один из его запросов на вытягивание не объединен или помещается в очередь для слияния; в противном случае он сохраняется с этими запросами на вытягивание.
Чтобы изменить порядок или изменить структуру стека, не растворяя его, используйте gh stack modify команду. См. статью "Реструктуризация стека".
Синхронизация локальной среды после слияния
Когда запрос на вытягивание в нижней части стека объединяется, обновите локальное состояние с помощью одной команды синхронизации. Чтобы автоматически обрезать локальные ветви для объединенных запросов на вытягивание одновременно, добавьте --prune этот параметр.
gh stack sync --prune
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, расхождение прерывает синхронизацию без отправки ветвей или обновления запросов на вытягивание. Разрешите его путем отмены размещения и повторного восстановления стека.