참고
이 기능은 공개 미리 보기로 제공되며 변경될 수 있습니다.
gh stack 확장은 GitHub CLI 로컬 리포지토리에서 끌어오기 요청 스택을 만들고 관리합니다. 스택에 대한 소개는 누적 끌어오기 요청을 참조하세요.
설치
gh extension install github/gh-stack
확장에는 (GitHub CLI) 버전 2.0 이상이 필요합니다 gh .
참고
gh stack 확장 프로그램은 GitHub CLI 인증을 사용합니다. 아직 인증하지 않았다면 gh auth login를 실행하세요.
명령 요약
| Command | Purpose |
|---|---|
gh stack init | 현재 리포지토리에서 새 스택을 초기화합니다. |
gh stack add | 현재 스택 위에 새 분기를 추가합니다. |
gh stack view | 현재 스택을 봅니다. |
gh stack checkout | 스택 번호, 끌어오기 요청 번호, 끌어오기 요청 URL 또는 분기 이름을 기준으로 스택을 확인합니다. |
gh stack modify | 현재 스택을 대화형으로 재구성합니다. |
gh stack unstack | 로컬 추적에서 스택을 제거하고 GitHub에서 스택 해제합니다. |
gh stack submit | 모든 분기를 푸시한 다음 GitHub에서 풀 리퀘스트와 스택을 생성하거나 업데이트합니다. |
gh stack sync | 단일 명령으로 풀 리퀘스트 상태를 가져오고, 리베이스하고, 푸시하고, 동기화합니다. |
gh stack rebase | 원격에서 끌어와 스택 전체에서 연속 리베이스를 실행합니다. |
gh stack push | 현재 스택의 활성 분기를 원격으로 푸시합니다. |
gh stack link | |
| GitHub에서 로컬 추적 없이 풀 리퀘스트를 스택으로 연결합니다. | |
gh stack merge | 하나 이상의 스택된 풀 리퀘스트를 한 번에 병합합니다. |
gh stack switch | 대화형으로 스택의 다른 분기로 전환합니다. |
gh stack up | 트렁크에서 멀어지도록 스택의 맨 위쪽을 향해 이동합니다. |
gh stack down | 스택의 아래쪽, 즉 트렁크 쪽으로 이동합니다. |
gh stack top | 스택의 맨 위로 이동합니다. |
gh stack bottom | 스택의 맨 아래로 이동합니다. |
gh stack trunk | 트렁크 브랜치로 전환합니다. |
gh stack alias | 더 적게 입력할 수 있도록 짧은 명령 별칭을 만듭니다. |
gh stack feedback | 확장에 대한 피드백을 공유합니다 gh stack . |
스택 관리
gh stack init
현재 리포지토리에서 새 스택을 초기화합니다.
gh stack init [flags] [branches...]
새 스택을 로컬로 초기화합니다. 대화형 모드(인수 없음)에서 명령은 분기 이름을 묻는 메시지를 표시하고 현재 분기를 첫 번째 계층으로 사용하도록 제안합니다.
분기 이름을 명시적으로 지정하면 기존 분기는 자동으로 사용되고 없는 분기는 생성됩니다. 트렁크는 --base로 재정의하지 않는 한 리포지토리의 기본 브랜치를 기본값으로 사용합니다.
이 명령은 git rerere를 자동으로 활성화하므로, 재베이스를 수행해도 충돌 해결 내용이 기억됩니다.
| Flag | Description |
|---|---|
-b, --base <branch> | 스택의 트렁크 브랜치(기본적으로 리포지토리의 기본 브랜치 사용) |
예제:
# Interactive — prompts for branch names
gh stack init
# Non-interactive — specify first branch upfront
gh stack init feature-auth
# Use a different trunk branch
gh stack init --base develop feature-auth
# Adopt or create multiple branches at once
gh stack init feature-auth feature-api feature-ui
gh stack add
현재 스택 위에 새 분기를 추가합니다.
gh stack add [flags] [branch]
기존 스택의 경우 현재 HEAD에 새 분기를 만들고 스택의 맨 위에 추가하고 체크 아웃합니다. 스택의 맨 위 분기에서 이 명령을 실행해야 합니다. 분기 이름을 제공하지 않으면 명령에서 해당 이름을 입력하라는 메시지가 표시됩니다.
스택 add 의 일부가 아닌 분기에서 대화형으로 명령을 실행하면 대신 새 스택을 초기화할 수 있습니다. 제공하는 분기 이름 또는 자동 생성된 이름이 첫 번째 계층이 됩니다. 이름을 제공하지 않으면 표준 init 프롬프트가 사용됩니다.
선택적으로 변경 사항을 스테이징하고 add 흐름의 일부로 커밋을 생성할 수 있습니다. 명시적 분기 이름 없이 제공 -m 하면 분기 이름이 날짜 및 슬러그 형식(예: 03-24-add_login슬러그 형식)으로 자동으로 생성됩니다.
| Flag | Description |
|---|---|
-A, --all | 추적되지 않은 파일을 포함하여 모든 변경 내용을 준비합니다. |
-m가 필요합니다. | |
-u, --update | 추적 중인 파일의 변경 사항만 스테이징하세요. |
-m가 필요합니다. | |
-m, --message <string> | 분기를 만들기 전에 이 메시지를 사용하여 커밋 만들기 |
참고
-A 는 -u 상호 배타적입니다.
예제:
# Create a branch by name
gh stack add api-routes
# Prompt for a branch name interactively
gh stack add
# Stage all changes, commit, and auto-generate the branch name
gh stack add -Am "Add login endpoint"
# Stage only tracked files, commit, and auto-generate the branch name
gh stack add -um "Fix auth bug"
# Commit already-staged changes and auto-generate the branch name
gh stack add -m "Add user model"
# Stage all changes, commit, and use an explicit branch name
gh stack add -Am "Add tests" test-layer
# Stage only tracked files, commit, and use an explicit branch name
gh stack add -um "Update docs" docs-layer
gh stack view
현재 스택을 봅니다.
gh stack view [flags]
스택의 모든 브랜치, 해당 정렬 순서, 풀 리퀘스트 링크, 그리고 상대 시간 표시와 함께 가장 최근 커밋을 표시합니다. 출력은 페이저를 통해 전달되며, GIT_PAGER 또는 PAGER을 따르고 기본값은 less -R입니다.
| Flag | Description |
|---|---|
-s, --short | 분기당 한 줄의 간결한 출력 |
--json | JSON으로 스택 데이터 출력 |
예제:
gh stack view
gh stack view --short
gh stack view --json
gh stack view --short 는 터미널에서 지원하는 경우 끌어오기 요청 번호에 OSC 8 하이퍼링크를 사용합니다. 그렇지 않으면 복사하여 붙여넣기 위해 전체 URL이 표시됩니다. 터미널 감지를 재정의하려면 GH_STACK_HYPERLINKS=1 또는 GH_STACK_HYPERLINKS=0을 설정하세요.
gh stack checkout
스택 번호, 끌어오기 요청 번호, 끌어오기 요청 URL 또는 분기 이름으로 스택을 확인합니다.
gh stack checkout [<stack-number> | <pr-number> | <pr-url> | <branch>]
숫자만 단독으로 입력되면 우선 스택 또는 풀 리퀘스트 번호로 해석됩니다. GitHub UI에 표시되는 리포지토리 범위의 식별자입니다. 해당 숫자와 일치하는 항목이 없으면 브랜치 이름으로 간주해 시도합니다.
원격 스택을 참조하면 명령이 GitHub에서 스택을 가져오고, 브랜치를 가져온 다음, 스택을 로컬에 설정합니다. 스택이 이미 로컬에 있고 일치하는 경우 명령은 분기로 전환됩니다. 로컬 및 원격 스택에 다른 컴퍼지션이 있는 경우 충돌을 해결하라는 메시지가 표시됩니다.
분기 이름을 제공하는 경우 명령은 먼저 로컬로 추적된 스택을 확인합니다. 분기가 로컬로 추적되지 않으면 명령은 원격 스택에서 분기를 찾고 일치하는 스택을 끌어냅니다. 둘 이상의 스택이 일치하는 경우 스택 또는 끌어오기 요청 번호를 사용하여 명시적으로 선택합니다.
대화형 터미널에서 인수 없이 명령을 실행하면 먼저 현재 브랜치가 로컬에서 추적되지 않는 원격의 스택에 속하는지 확인하고, 해당 스택을 체크아웃할지 제안합니다. 유일하게 일치하는 항목이 없거나 사용자가 이를 거부하면, 로컬에서 추적 중인 스택과 GitHub에만 존재하는 스택을 모두 나열하는 검색 가능한 선택기가 열립니다. 각 행에는 스택 번호, 아래쪽 및 위쪽 분기, 기본 분기, 병합, 열기, 닫힘 또는 아직 푸시되지 않은 끌어오기 요청 수와 스택을 로컬에서 사용할 수 있는지 아니면 원격에서만 사용할 수 있는지를 요약한 상태 표시줄이 표시됩니다.
모두, 로컬 및 원격 탭을 사용하여 필터링하거나 검색할 형식 / 을 지정합니다. 완전히 병합된 스택은 생략됩니다. 원격 전용 스택을 선택하면 해당 스택으로 전환하기 전에 로컬로 복제됩니다.
예제:
# Check out a stack by its stack number
gh stack checkout 7
# Check out a stack by pull request number
gh stack checkout 42
# Check out a stack by pull request URL
gh stack checkout https://github.com/owner/repo/pull/42
# Check out a stack by branch name
gh stack checkout feature-auth
# Interactive — pick from all available stacks (local and remote)
gh stack checkout
gh stack modify
현재 스택을 대화형으로 재구성합니다.
gh stack modify [flags]
스택을 재구성하기 위한 대화형 터미널 UI를 엽니다. 모든 변경 내용은 인터페이스에 임시로 반영되며 Ctrl+S를 누르면 함께 적용됩니다. 병합된 풀 리퀘스트의 브랜치는 수정할 수 없습니다.
| Flag | Description |
|---|---|
--continue | 충돌을 해결한 후 계속 |
--abort | 명령을 실행하기 전에 수정 세션을 중단하고 스택을 해당 상태로 복원합니다. |
사전 조건
이 명령은 인터페이스를 열기 전에 다음 조건을 확인합니다.
- 로컬에 활성 상태의 스택이 체크아웃되어 있어야 합니다.
- 커밋되지 않은 변경 내용 없이 작업 트리가 깨끗해야 합니다.
- 재베이스가 진행 중이 아닙니다.
- 스택 내 풀 리퀘스트 중 병합 대기열에 올라간 것은 없습니다.
- 커밋 기록은 병합 커밋 및 분기가 없는 선형이어야 합니다.
Operations
| Operation | 암호키 | Effect |
|---|---|---|
| Drop | ||
| x | 스택에서 분기 및 해당 커밋을 제거합니다. 로컬 분기 및 연결된 끌어오기 요청이 유지됩니다. | |
| 아래로 접기 | ||
| d | 아래 브랜치의 커밋을 트렁크 방향으로 흡수합니다. 접힌 분기가 스택에서 제거됩니다. | |
| 위로 접기 | ||
| u | 커밋을 트렁크에서 멀어지는 방향의 상위 브랜치에 흡수합니다. 접힌 분기가 스택에서 제거됩니다. | |
| 아래에 삽입 | ||
| i | 커서 아래쪽에 트렁크 쪽으로 새 빈 분기를 삽입합니다. | |
| 위에 삽입 | ||
| 나는 | 커서 위에 비어 있는 새 분기를 트렁크에서 멀리 떨어진 곳에 삽입합니다. | |
| 아래로 이동 | ||
| Shift+↓ | 브랜치를 아래로, 트렁크 쪽으로 재정렬합니다. | |
| 위로 이동 | ||
| Shift+↑ | 브랜치를 트렁크에서 멀어지는 방향으로 위로 재정렬합니다. | |
| Rename | ||
| r | 인라인 프롬프트를 사용해 브랜치 이름을 바꿉니다. | |
| Undo | ||
| z | 마지막으로 준비된 작업을 실행 취소합니다. |
적용 단계
Ctrl+S를 누르면 분기 이름을 변경하고, 새 분기를 삽입하고, 분기를 접거나 삭제하고, 계단식 재베이스를 실행하여 원하는 스택 상태로 선형 커밋 기록을 만들어 스테이징된 변경 내용이 적용됩니다.
재베이스 충돌이 발생하는 경우 다음 중 하나를 수행할 수 있습니다.
- 충돌을 해결하고 파일을 스테이징한 다음 실행
gh stack modify --continue합니다. - 실행
gh stack modify --abort하여 작업을 중단하고 스택을 이전 상태로 복원합니다.
수정 후
GitHub에 이미 pull request 스택을 만들어 두었다면, gh stack submit을 실행하여 업데이트된 브랜치를 푸시하고 스택을 다시 생성하세요. 이전 스택이 자동으로 바뀝니다.
예제:
# Open the interactive modify interface
gh stack modify
# Continue after resolving a conflict
gh stack modify --continue
# Abort and restore to the previous state
gh stack modify --abort
gh stack unstack
로컬 추적에서 스택을 제거하고 GitHub에서 스택 해제합니다. 이 명령은 gh stack delete로도 사용할 수 있습니다.
gh stack unstack [<stack-number>] [flags]
인수가 없으므로 명령은 현재 체크 아웃된 분기가 포함된 스택인 활성 스택을 대상으로 합니다. GitHub의 스택을 해제하고 로컬 추적 정보를 제거합니다.
스택 번호( 스택 UI에 GitHub표시된 식별자)를 제공하여 특정 스택의 스택을 해제합니다. 이는 스택이 GitHub API를 통해 직접 언스택되므로, 스택이 로컬에 체크아웃되어 있는지 여부와 관계없이 리포지토리의 어디에서나 작동합니다. 스택을 로컬에서도 사용할 수 있는 경우 로컬 추적도 제거됩니다.
병합되었거나, 병합 중이거나, 병합 대기열에 있는 풀 리퀘스트는 GitHub에서 스택에서 제거할 수 없으며 계속 스택의 일부로 남습니다. 모든 끌어오기 요청이 제거되면 스택이 용해되고 로컬 추적이 제거됩니다. 일부 끌어오기 요청이 누적된 상태로 유지되면 스택이 유지되고 로컬 추적(있는 경우)은 변경되지 않습니다. 원격 작업을 건너뛰고 로컬 추적만 제거하는 데 사용합니다 --local .
이 명령은 분기를 제거하거나, 분기를 삽입하거나, 분기의 순서를 변경하거나, 분기 이름을 바꾸거나, 기타 큰 변경을 수행하여 스택을 재구성해야 하는 경우에 유용합니다. 스택 해제 후, 원하는 구조로 스택을 다시 생성하려면 gh stack init를 사용합니다. 기존 분기는 자동으로 적용됩니다.
| Flag | Description |
|---|---|
--local | 스택을 로컬에서만 제거하고 GitHub에는 유지합니다 |
예제:
# Unstack the current stack on GitHub and remove local tracking
gh stack unstack
# Unstack a specific stack by its number
gh stack unstack 7
# Only remove local tracking
gh stack unstack --local
원격 작업
gh stack submit
모든 분기를 푸시한 다음 GitHub에서 풀 리퀘스트와 스택을 생성하거나 업데이트합니다.
gh stack submit [flags]
스택의 모든 분기에 대한 끌어오기 요청을 만들어 분기를 원격으로 푸시합니다. 끌어오기 요청을 만든 후, submit는 GitHub에서 끌어오기 요청들을 서로 연결하는 스택을 자동으로 생성합니다. 예를 들어 이전 제출에서 스택이 GitHub이미 있는 경우 새 끌어오기 요청이 기존 스택에 추가됩니다.
스택의 모든 끌어오기 요청이 이미 병합된 경우 해당 스택이 완료되고 확장할 수 없습니다. 이 경우 submit는 병합되지 않은 브랜치에 대해 트렁크를 루트로 하는 새 스택을 자동으로 시작하고, 이를 GitHub에 생성하며, 병합된 스택은 그대로 유지합니다.
대화형 터미널 submit 에서 단일 화면에서 전체 화면 편집기를 엽니다.
- 왼쪽 패널입니다. 끌어오기 요청이 없는 모든 분기는 기본적으로 포함됩니다. Ctrl+X를 사용하여 제출하지 않으려는 항목을 선택 취소합니다. 각 풀 리퀘스트는 그 아래에 있는 브랜치를 기반으로 하므로, 브랜치 하나의 선택을 취소하면 그 위에 쌓인 브랜치들도 함께 선택 해제되고, 브랜치를 다시 포함하면 그 브랜치가 의존하는 아래쪽 브랜치들도 다시 포함됩니다. 이미 풀 리퀘스트가 있는 분기(열려 있거나, 초안이거나, 대기 중이거나, 병합된 경우)는 참고용으로 표시되지만 잠겨 있습니다. 웹에서 그것들을 편집하세요.
- 오른쪽 패널입니다. 선택한 분기에 대해 제목과 설명을 작성하고, 풀 리퀘스트를 검토 준비 상태로 열지 아니면 초안으로 열지 선택합니다. 설명은 markdown 미리 보기 및
$EDITOR이스케이프를 사용하여 리포지토리의 끌어오기 요청 템플릿 또는 커밋에서 미리 채워집니다. 잠긴 브랜치에 포커스를 두면 해당 풀 리퀘스트로 연결되는 링크가 포함된 읽기 전용 카드가 표시됩니다. o 키를 눌러 브라우저에서 엽니다.
Ctrl+S를 눌러 포함된 모든 끌어오기 요청을 한 번에 제출합니다. 편집기에서 키보드와 마우스 입력을 모두 지원합니다.
--auto를 전달하거나 CI와 같은 비대화형 터미널에서 명령을 실행하여 편집기를 건너뛰고 자동으로 생성된 제목을 사용합니다.
브랜치들에 이미 열려 있는 풀 리퀘스트가 있지만 GitHub에 스택이 없는 경우, Ctrl+B를 사용하여 풀 리퀘스트를 스택으로 연결할 수 있습니다.
편집기에서 새 풀 리퀘스트는 기본적으로 검토 준비 상태로 설정됩니다. 토글을 사용하여 끌어오기 요청을 초안으로 전환할 수 있습니다.
--auto를 사용하면 --open를 전달하지 않는 한 새 풀 리퀘스트가 초안으로 생성됩니다.
| Flag | Description |
|---|---|
--auto | 편집기를 건너뛰고 자동으로 생성된 끌어오기 요청 제목 사용 |
--open | 초안 대신 검토할 준비가 된 새 끌어오기 요청을 만들고 기존 끌어오기 요청을 검토할 준비가 된 것으로 표시합니다. |
--remote <name> | 푸시할 원격(기본값: 자동으로 검색된 원격) |
예제:
gh stack submit
gh stack submit --auto
gh stack submit --open
gh stack sync
단일 명령으로 풀 리퀘스트 상태를 가져오고, 리베이스하고, 푸시하고, 동기화합니다.
gh stack sync [flags]
전체 스택을 동기화합니다.
- 인출합니다.
origin에서 최신 변경 내용을 가져옵니다. - 원격 스택을 조정합니다. 로컬에서 GitHub 스택을 복제합니다. GitHub의 스택에 풀 리퀘스트가 추가되어 원격이 로컬 스택보다 앞선 상태가 되면, 해당 브랜치가 자동으로 내려받아져 로컬 스택에 추가됩니다. 로컬 스택과 원격 스택이 실제로 서로 갈라진 경우(예를 들어, 로컬에서 브랜치를 추가하는 동안 GitHub의 스택에는 다른 풀 리퀘스트가 추가된 경우)에는 그 차이를 해결하라는 메시지가 표시됩니다. 분기된 스택을 참조하세요. 비대화형 터미널에서는 불일치가 발생하면 동기화가 중단되고, 아무것도 푸시되거나 업데이트되지 않습니다.
- 빠른 앞으로 트렁크. 트렁크 브랜치를 원격 브랜치에 맞게 패스트포워드합니다. 브랜치가 서로 갈라진 경우 이 단계는 건너뜁니다.
- Cascade를 다시베이스합니다. 트렁크가 이동한 경우에만 스택의 모든 브랜치를 업데이트된 부모 브랜치 기준으로 리베이스합니다. 충돌이 감지되면 모든 분기가 원래 상태로 복원되고 대화형으로 충돌을 해결하기 위해 실행하는
gh stack rebase것이 좋습니다. - 밀어. 리베이스가 발생한 경우
--force-with-lease를 사용하여 모든 브랜치를 푸시합니다. - 끌어오기 요청을 동기화합니다. 끌어오기 요청 상태를 GitHub 동기화하고 각 끌어오기 요청의 상태를 보고합니다.
- 스택을 동기화합니다. 스택의 열려 있는 풀 리퀘스트를 GitHub의 스택에 연결하고, 원격 스택 객체가 아직 없으면 생성하며 일부만 생성된 상태이면 업데이트합니다. 이는 두 개 이상의 끌어오기 요청이 있는 경우에만 발생합니다. 동기화는 끌어오기 요청을 열지 않습니다. 이를 위해 사용합니다
gh stack submit. - 정리하세요. 대화형 터미널에서 병합된 끌어오기 요청에 대한 로컬 분기를 삭제하라는 메시지가 표시됩니다.
--prune를 사용하여 자동으로 가지치기합니다.
끌어오기 요청이 로컬 스택 위에 추가되는 클린 원격 업데이트는 프롬프트 없이 자동으로 아래로 당겨지므로 sync 자동화에서 안전하게 실행할 수 있습니다. 동기화는 스택이 실제로 분기된 경우에만 프롬프트를 표시합니다.
분기된 스택
예를 들어, 로컬에서 브랜치를 추가하는 동안 동일한 스택에 대한 별도의 풀 리퀘스트가 GitHub에서 추가되어 어느 한 스택도 다른 스택의 깔끔한 접두 스택이 아닌 경우, sync는 두 스택을 자동으로 병합할 수 없습니다. 대화형 터미널에서는 세 가지 선택 항목을 제공합니다.
- 원격 스택을 진실의 근원으로 사용합니다. 누락된 분기를 끌어와 로컬 스택 컴퍼지션을 원격으로 바꿉니다. 원격 스택에 더 이상 포함되지 않는 분기에 있는 경우 가장 가까운 생존 분기로 이동됩니다. 이렇게 하려면 커밋되지 않은 변경 내용이 없는 깨끗한 작업 상태가 필요합니다.
- 에서 스택을 삭제합니다 GitHub. 스택 개체 GitHub 를 삭제하고 동기화를 중지합니다. 끌어오기 요청 및 로컬 분기는 그대로 유지되고 스택 GitHub 만 제거됩니다. 구조를 변경하려면 먼저 실행
gh stack submit하여 스택gh stack modify을 다시 만듭니다. 이것이 GitHub을(를) 로컬 스택과 일치시키는 방법입니다. 왜냐하면submit은(는)sync와 달리 아직 제출하지 않은 모든 브랜치에 대해서도 풀 리퀘스트를 생성하기 때문입니다. - 취소. 브랜치를 푸시하거나 풀 리퀘스트를 업데이트하지 않고 동기화를 취소합니다.
비대화형 터미널에서는 불일치가 발생하면 동기화가 중단되고, 브랜치를 푸시하거나 풀 리퀘스트를 업데이트하지 않은 채 성공 상태로 종료됩니다. 스택을 제거하고 다시 만들어 해결합니다.
| Flag | Description |
|---|---|
--remote <name> | 가져오기 및 푸시 대상 원격 저장소(기본값은 자동으로 감지된 원격 저장소) |
--prune | 병합된 끌어오기 요청에 대한 로컬 분기 삭제 |
예제:
gh stack sync
# Sync and automatically prune merged branches
gh stack sync --prune
gh stack rebase
원격에서 끌어와 스택 전체에서 연속 리베이스를 실행합니다.
gh stack rebase [flags] [branch]
origin에서 최신 변경 사항을 가져온 다음, 스택의 각 브랜치의 커밋 기록에 이전 레이어의 최신 커밋이 포함되도록 합니다. 브랜치는 트렁크부터 위로 순서대로 리베이스됩니다.
브랜치의 풀 리퀘스트가 병합된 경우, 리베이스는 병합 대상 브랜치 기준으로 커밋을 올바르게 다시 적용하기 위해 자동으로 --onto 모드로 전환됩니다.
재베이스 충돌이 발생하면 작업이 일시 중지되고 줄 번호가 있는 충돌 파일을 출력합니다. 충돌을 해결한 후 git add로 스테이징한 다음, --continue로 계속하세요. 전체 리베이스를 실행 취소하려면 --abort를 사용하여 모든 브랜치를 리베이스 전 상태로 복원합니다.
| Flag | Description |
|---|---|
--downstack | 트렁크에서 현재 브랜치로만 브랜치를 리베이스합니다 |
--upstack | 현재 브랜치부터 맨 위까지의 브랜치만 리베이스 |
--no-trunk | 트렁크를 건너뜁니다. 스택 브랜치들은 fetch 없이, trunk 리베이스 없이 서로 간에만 리베이스합니다. |
--continue | 충돌을 해결한 후 리베이스를 계속하세요 |
--abort | 리베이스를 중단하고 모든 브랜치를 리베이스 이전 상태로 복원합니다 |
--remote <name> | 인출할 원격(기본값: 자동으로 검색된 원격) |
--committer-date-is-author-date | 다시베이스하는 동안 커밋자 날짜를 작성자 날짜로 설정합니다. 별칭: --preserve-dates. |
| Argument | Description |
|---|---|
[branch] | 대상 분기(기본값: 현재 분기) |
예제:
# Rebase the entire stack
gh stack rebase
# Only rebase branches below the current one
gh stack rebase --downstack
# Only rebase branches above the current one
gh stack rebase --upstack
# Rebase stack branches without pulling from or rebasing with trunk
gh stack rebase --no-trunk
# After resolving a conflict
gh stack rebase --continue
# Abort rebase and restore everything
gh stack rebase --abort
# Rebase and preserve committer date as author date
gh stack rebase --committer-date-is-author-date
gh stack push
현재 스택의 활성 분기를 원격으로 푸시합니다.
gh stack push [flags]
병합된 브랜치와 대기열에 있는 브랜치를 제외한 모든 활성 브랜치를, 브랜치별 명시적 --force-with-lease 검사를 사용하여 단일 git push로 푸시합니다. 업데이트는 원자적이지 않습니다. 다른 브랜치가 거부되더라도 리스가 통과된 브랜치는 업데이트할 수 있습니다. 거부된 분기를 수정하고 명령을 다시 실행합니다. 이미 업데이트된 분기는 변경되지 않습니다. 이 명령은 끌어오기 요청을 만들거나 업데이트하지 않습니다. 이를 위해 사용합니다 gh stack submit .
| Flag | Description |
|---|---|
--remote <name> | 푸시할 원격(기본값: 자동으로 검색된 원격) |
예제:
gh stack push
gh stack push --remote upstream
gh stack link
GitHub에서 로컬 추적 없이 풀 리퀘스트를 스택으로 연결합니다.
gh stack link [flags] <stack-number | branch-or-pr> <branch-or-pr> [...]
브랜치 이름 또는 풀 리퀘스트 번호와 URL을 사용해 GitHub에서 스택을 생성하거나 업데이트합니다. 이 명령은 로컬 추적 상태를 만들거나 수정하지 않습니다. 로컬에서 Jujutsu, Sapling 또는 git-town 같은 다른 도구로 브랜치를 관리하면서 여러 개의 풀 리퀘스트로 이루어진 스택을 열고자 하는 사람들을 위해 설계되었습니다. 누적 끌어오기 요청과 함께 다른 도구 사용을(를) 참조하세요.
인수를 아래쪽에서 위쪽으로 스택 순서로 제공합니다. 분기 인수는 끌어오기 요청을 만들거나 조회하기 전에 자동으로 원격으로 푸시됩니다. 이미 열려 있는 풀 리퀘스트가 있는 브랜치의 경우 해당 풀 리퀘스트가 사용됩니다. 끌어오기 요청이 없는 분기의 경우 올바른 기본 분기 체인을 사용하여 새 끌어오기 요청이 자동으로 생성됩니다. 기본 분기가 예상 체인과 일치하지 않는 기존 끌어오기 요청은 자동으로 수정됩니다.
끌어오기 요청이 아직 스택에 없으면 새 스택이 만들어집니다. 일부 끌어오기 요청이 이미 스택에 있는 경우 기존 스택이 새 끌어오기 요청을 포함하도록 업데이트됩니다. 기존 끌어오기 요청은 업데이트가 가산적이기 때문에 스택에서 제거되지 않습니다.
끌어오기 요청을 다시 나열하지 않고 기존 스택을 증가하려면 스택 UI에 GitHub표시된 숫자인 스택 번호를 첫 번째 인수로 전달합니다. 나머지 인수는 해당 스택의 맨 위에 추가됩니다. 스택에 이미 있는 인수는 건너뛰고 다른 스택에 속하는 인수는 거부됩니다. 스택 및 끌어오기 요청 번호는 겹치지 않으므로 숫자 첫 번째 인수는 기존 스택과 일치하는 경우에만 스택으로 처리됩니다. 그렇지 않으면 끌어오기 요청 또는 분기로 처리됩니다.
| Flag | Description |
|---|---|
--base <branch> | 스택의 맨 아래에 대한 기본 분기(기본값은 리포지토리의 기본 분기)입니다. 이 플래그는 기존 스택에 추가할 때 무시됩니다. |
--open | 새 끌어오기 요청과 기존 끌어오기 요청을 검토할 준비가 된 것으로 표시 |
--remote <name> | 푸시할 원격(기본값: 자동으로 검색된 원격) |
예제:
# Link branches into a stack (pushes, creates pull requests, creates stack)
gh stack link feature-auth feature-api feature-ui
# Link existing pull requests by number
gh stack link 10 20 30
# Link existing pull requests by URL
gh stack link https://github.com/owner/repo/pull/10 https://github.com/owner/repo/pull/20
# Add branches to an existing stack of pull requests
gh stack link 42 43 feature-auth feature-ui
# Append to the top of an existing stack by its stack number, with no need
# to list the pull requests already in stack 7 again
gh stack link 7 48 feature-ui
# Use a different base branch and mark pull requests as ready for review
gh stack link --base develop --open feat-a feat-b feat-c
gh stack merge
하나 이상의 스택된 풀 리퀘스트를 한 번에 병합합니다.
gh stack merge [<stack-number> | <pr-number>]
선택한 끌어오기 요청을 포함하여 스택의 모든 끌어오기 요청을 기본 분기에 병합합니다. 병합은 모두 또는 전혀 없는 단일 작업입니다. 풀 리퀘스트 중 하나라도 병합할 수 없으면, 그 어느 것도 병합되지 않습니다.
인수가 없으므로 명령은 활성 로컬 스택을 사용합니다. 체크아웃하지 않은 스택(즉, 원격에서만 수행되는 작업)을 병합하려면 스택 번호를 지정하거나, 해당 풀 리퀘스트까지 직접 병합하려면 풀 리퀘스트 번호를 지정합니다.
대화형 터미널에서 명령은 병합할 끌어오기 요청을 선택하고 병합 메서드를 선택하고 확인하라는 메시지를 표시합니다. 비대화형 터미널에서 또는 --yes를 사용하는 경우, 전체 스택 또는 지정한 pull request까지의 모든 항목이 추가 확인 없이 병합되며, 별도로 지정하지 않으면 가장 최근에 사용한 병합 방식을 사용합니다.
병합하기 전에 기본 끌어오기 요청 상태만 확인합니다. 각 끌어오기 요청은 열려 있어야 하며 초안이 아니어야 합니다. GitHub는 병합이 실행될 때 분기 보호 및 리포지토리 규칙을 평가하며, 실패가 발생하면 모두 사용자에게 보고됩니다.
참고
누적 끌어오기 요청을 병합할 때는 병합 요구 사항을 무시할 수 없습니다.
기본 분기에서 병합 큐를 사용하는 경우 스택은 직접 병합되는 대신 큐에 추가됩니다. 큐는 병합 메서드를 선택하므로 프롬프트는 병합 메서드 단계를 건너뛰고 --merge-method, --squash, --rebase및 --merge 플래그는 경고와 함께 무시됩니다. 선택한 끌어오기 요청은 큐에 함께 추가되지만 큐에서 처리할 때 병합되므로 한 번에 모두 아닌 별도의 그룹에 배치할 수 있습니다.
| Flag | Description |
|---|---|
--merge-method <method> | 사용할 병합 메서드: merge, squash, 또는 rebase |
--merge, --squash, --rebase | 해당 병합 메서드의 축약형 |
-y, --yes | 확인 메시지를 표시하지 않고 병합 |
예제:
# Merge the current stack, choosing pull requests interactively
gh stack merge
# Merge a stack you do not have checked out, by stack number
gh stack merge 7
# Merge everything up to and including pull request 42
gh stack merge 42
# Merge the whole current stack without prompting, squashing commits
gh stack merge --yes --squash
네비게이션
탐색 명령은 분기 이름을 기억할 필요 없이 현재 스택의 분기 간에 이동합니다. 스택의 맨 아래는 트렁크에 가장 가까운 분기이며, 위쪽은 트렁크에서 가장 먼 분기입니다.
up는 트렁크에서 멀어지고, down는 트렁크 쪽으로 이동합니다.
모든 탐색 명령은 스택의 경계를 고정합니다. 위에서 위로 이동하거나 아래쪽에서 아래로 이동하면 아무 작업도 수행하지 않으며 메시지가 표시됩니다.
gh stack switch
대화형으로 스택의 다른 분기로 전환합니다.
gh stack switch
현재 스택의 모든 분기를 나열하는 대화형 선택기를 보여 줍니다. 위쪽에서 트렁크에서 가장 먼 지점, 아래쪽, 트렁크에 가장 가까운 위치 번호로 정렬됩니다. 체크아웃할 브랜치를 선택하세요.
이 명령에는 대화형 터미널이 필요합니다.
예제:
gh stack switch
# → Select a branch in the stack to switch to
# 5. frontend
# 4. api-endpoints
# 3. auth-layer
# 2. db-schema
# 1. config-setup
gh stack up
트렁크에서 멀어지도록 스택의 맨 위쪽을 향해 이동합니다.
gh stack up [n]
n개 분기 위로 이동하며, 기본값은 1입니다. 현재 트렁크 브랜치에 있는 경우 up이 첫 번째 스택 브랜치로 이동합니다.
예제:
# Move up one layer
gh stack up
# Move up three layers
gh stack up 3
gh stack down
스택의 아래쪽, 즉 트렁크 쪽으로 이동합니다.
gh stack down [n]
n개 분기 아래로 이동하며, 기본값은 1입니다.
예제:
# Move down one layer
gh stack down
# Move down two layers
gh stack down 2
gh stack top
스택의 맨 위로 이동합니다.
gh stack top
트렁크에서 가장 멀리 있는 브랜치를 체크아웃합니다.
gh stack bottom
스택의 맨 아래로 이동합니다.
gh stack bottom
트렁크에 가장 가까운 브랜치를 체크아웃합니다.
gh stack trunk
트렁크 브랜치로 전환합니다.
gh stack trunk
현재 스택의 트렁크 브랜치(예: main)를 체크아웃합니다. 스택에 속한 브랜치에 있어야 합니다.
Utilities
gh stack alias
더 적게 입력할 수 있도록 짧은 명령 별칭을 만듭니다.
gh stack alias [flags] [name]
모든 인수를 gh stack로 전달하는 작은 래퍼 스크립트를 ~/.local/bin/에 설치합니다. 기본 별칭 이름은 gs이지만 인수로 전달하여 이름을 선택할 수 있습니다. 설치 후에는 gh stack push 대신 gs push을 실행할 수 있습니다.
Windows 자동 별칭 만들기는 지원되지 않습니다. 이 명령은 일괄 처리 파일 또는 PowerShell 함수를 만들기 위한 수동 지침을 출력합니다.
| Flag | Description |
|---|---|
--remove | 이전에 만든 별칭 제거 |
예제:
# Create the default alias (gs), so that "gs push" and "gs view" both work
gh stack alias
# Create a custom alias
gh stack alias gst
# Remove an alias
gh stack alias --remove
gh stack alias --remove gst
gh stack feedback
확장에 대한 피드백을 공유합니다 gh stack .
gh stack feedback [title]
피드백을 제출할 수 있도록 gh-stack 리포지토리 에서 토론을 엽니다. 필요에 따라 토론 게시물의 제목을 제공할 수 있습니다.
예제:
gh stack feedback
gh stack feedback "Support for reordering branches"
환경 변수
| Variable | 값 | Description |
|---|---|---|
GH_STACK_THEME | ||
auto(기본값), light, dark | ||
submit, modify, view의 대화형 화면과 색상이 적용된 모든 명령 출력의 색상 팔레트를 제어합니다. 색은 터미널 배경에 자동으로 조정됩니다. 터미널이 배경을 알리지 않는 경우 밝은색 또는 어두운색 팔레트를 강제로 사용하도록 이 변수를 설정합니다. 이런 경우는 일부 SSH 또는 tmux 설정에서 발생할 수 있습니다. | ||
GH_STACK_HYPERLINKS | ||
0, 1 | 터미널 감지가 잘못된 경우 OSC 8 하이퍼링크를 비활성화하거나 활성화합니다. 지원되지 않는 터미널은 기본적으로 전체 URL을 표시합니다. |
# Force the light palette for one command
GH_STACK_THEME=light gh stack view
종료 코드
| 코드 | Meaning |
|---|---|
| 0 | Success |
| 1 | 일반 오류 |
| 2 | 스택에 없거나 스택을 찾을 수 없음 |
| 3 | 재베이스 충돌 |
| 4 | |
| GitHub API 오류 | |
| 5 | 잘못된 인수 또는 플래그 |
| 6 | 브랜치가 여러 스택에 속해 있으므로 구분이 필요합니다. |
| 7 | Rebase가 이미 진행 중입니다. |
| 8 | 스택이 다른 프로세스에 의해 잠겨 있습니다. |
| 9 | 이 리포지토리에 대해 누적 끌어오기 요청을 사용할 수 없습니다. |
| 10 | 세션 수정이 중단되고 복구가 필요합니다. |