스킬

gh-stack: GitHub CLI로 겹친 PR 관리하기

이미 GitHub CLI v2.0+가 있을 때 겹친 브랜치와 Pull Request를 관리한다. 먼저 gh-stack 확장을 설치하고, 브랜치를 만드는 gh stack init은 확인한 뒤에 실행한다.

Official source · gh-stack

Install

gh extension install github/gh-stack

누구에게 맞나

gh-stack은 겹친 브랜치와 Pull Request를 관리하는 GitHub CLI 확장이다. 이미 GitHub CLI를 쓰고 있으며, 순서가 있는 브랜치 묶음을 하나의 stack으로 밀고 싶은 사람에게 맞다. 요약은 확장 설치에 GitHub CLI v2.0+가 필요하다고도 적는다.

자료는 AI 코딩 에이전트가 겹친 PR과 gh stack 명령줄을 이해하도록 gh-stack skill을 설치할 수 있다고 언급한다. 그러나 발췌는 「그 skill을 설치한다」고만 쓰고 두 번째 설치 명령은 주지 않으므로, 나타나지 않은 설치기를 스스로 보태지 말 것. 자료는 에이전트 제품 목록을 주지 않으며, 특정 편집기 전용 기능으로 이해해서는 안 된다. 공식 설명 페이지는

https://github.com/github/gh-stack

3분 안에 첫 시도 끝내기

공식 설치 명령은 발췌에 있는 이 한 줄이다:

gh extension install github/gh-stack

전제: 이 머신에 이미 GitHub CLI가 있고, 버전이 요약의 v2.0+를 충족한다. 이 명령은 머신에 확장을 쓰므로 부작용이 있다. 현재 저장소와 계정이 stack을 시험할 환경인지 확인한 뒤 설치를 실행한다.

설치 후 저위험 확인: 바로 브랜치를 만들지 말 것. 먼저 명령 gh stack을 CLI가 찾을 수 있는지 확인한다. 자료는 gh stack init을 「새 stack을 시작하고 첫 브랜치를 만들어 체크아웃한다」고 설명한다. 작업 트리를 바꾸므로 확인을 받은 뒤에 실행한다:

gh stack init

성공 신호: 설치 후 gh가 stack 하위 명령을 인식한다. 새 stack을 시작하겠다고 확인했다면, init 이후 현재 저장소에 새 첫 브랜치가 나타나고, 나중에 커밋되지 않은 .git/gh-stack에서 JSON 메타데이터를 볼 수 있다. 설명만 먼저 보려면 설치 성공에서 멈추고 init하지 말 것.

사용 사례

사례 1: 새 겹친 브랜치를 시작한다. 확장이 설치된 저장소에서 브랜치를 바꿔도 되는지 확인한 뒤 gh stack init을 실행한다. 자료는 이를 첫 브랜치를 만들고 체크아웃한다고 쓴다. 요약은 이어서 층을 더하고, 푸시하고, 보고, PR 묶음을 제출한다고도 말하지만, 발췌는 그 후속 하위 명령의 완전한 표기를 주지 않는다. 이 사례의 완료 기준은 「첫 브랜치가 생성되고 체크아웃됨」까지이며, 푸시나 PR 열기를 이미 복사 가능한 단계로 쓰지 말 것.

사례 2: stack 메타데이터가 어디에 떨어지는지 확인해, 중단된 rebase 뒤에 무엇을 볼지 이해한다. 자료는 이렇게 적는다: stack 메타데이터는 .git/gh-stack에 있으며, 저장소에 커밋되지 않는 JSON으로 어떤 브랜치가 어떤 stack에 속하고 순서가 무엇인지를 기록한다. 중단된 rebase 상태는 따로 .git/gh-stack-rebase-state에 있다. 이는 읽기 전용 검사다. 두 경로를 열어 파일이 있는지, JSON이 현재 브랜치 순서를 추적하는지 확인한다. 같은 페이지에 다른 단계가 없으면 이 파일을 손으로 고치지 말 것. 발췌는 편집 형식을 주지 않는다.

사용 경계

확장은 겹친 브랜치와 Pull Request 관리만 다룬다. 메타데이터는 .git/gh-stack에 있고 버전 트리에 들어가지 않는다. rebase 중단 상태는 .git/gh-stack-rebase-state에 있다. init은 브랜치를 만들고 체크아웃하며 읽기 전용 명령이 아니다.

발췌에 나타나지 않은 skill 설치 명령을 지어내지 말고, 요약의 층 추가·푸시·보기·제출을 이미 주어진 하위 명령 목록으로 이해하지 말 것. 자료는 클라이언트 목록도, GitHub CLI 밖에서의 사용법도 쓰지 않는다. 여기에 적힌 설치, init, 메타데이터 위치를 넘어서는 범위는 이 설명이 다루지 않는다.