
GitHub가 같은 저장소의 여러 풀 리퀘스트(PR)를 의존 관계에 따라 묶는 스택 기능을 지원한다. 큰 변경을 작고 독립적으로 검토할 수 있는 PR로 나누되, 앞선 변경이 아직 병합되지 않았어도 다음 작업을 이어갈 수 있다.
스택은 두 개 이상의 PR을 아래에서 위로 연결한다. 가장 아래 PR은 보통 main 같은 기본 브랜치를 대상으로 하고, 각 후속 PR은 바로 아래 PR의 브랜치를 대상으로 삼는다. 각 PR에는 해당 단계의 변경만 담기 때문에 검토자는 전체 변경 대신 작은 단위의 차이를 살펴볼 수 있다. 한 단계의 코드가 다른 단계에 의존한다면 그 의존 코드는 같은 브랜치나 더 아래 브랜치에 있어야 한다.
GitHub는 스택의 브랜치를 자동으로 리베이스한다. PR에서 서버 측 연쇄 리베이스를 실행하거나 GitHub CLI의 gh stack 확장으로 로컬에서 처리할 수 있다. 스택의 가장 아래 PR을 병합하면 나머지 브랜치가 자동으로 리베이스돼 다음 PR이 기본 브랜치를 대상으로 한다.
기능은 GitHub CLI와 웹사이트, GitHub Mobile에서 사용할 수 있으며, 웹훅·REST API·GraphQL로도 연동할 수 있다. GitHub CLI 확장은 브랜치 생성과 추적, 리베이스, 푸시, PR 생성·연결, 스택 단계 간 이동을 지원한다. 웹사이트에서는 PR의 스택 단계와 전체 PR의 상태를 확인하고 다른 단계로 이동할 수 있다. 에이전트용으로는 gh-stack 스킬을 제공한다.
웹훅의 pull_request 이벤트에는 스택 정보가 포함된다. REST API로 스택 구성원을 조회하고 스택을 나열·생성·확장·해체할 수 있으며, GraphQL API에서는 스택과 PR의 위치 정보를 읽을 수 있다.
기본 브랜치의 병합 요건을 기준으로 스택의 PR을 검사한다. 브랜치 보호 규칙은 기본 브랜치를 직접 대상으로 삼지 않는 중간 단계의 PR에도 적용되며, 기본 브랜치에 설정된 PR 트리거 CI 검사도 스택의 모든 PR에서 실행된다. 전체 스택이나 일부를 병합할 수 있지만, 병합 순서는 아래 단계부터여야 한다. 맨 위 PR을 병합하면 전체 스택이 병합되고, 중간 PR을 병합하면 그 아래 PR도 함께 병합되며 위쪽 PR은 열린 상태로 기본 브랜치를 대상으로 다시 설정된다. 병합 방식으로는 merge commit, squash, rebase를 지원하고 merge queue도 인식한다.
모든 브랜치는 같은 저장소에 있어야 하며, 포크를 넘나드는 스택은 지원하지 않는다. GitHub Desktop에서도 사용할 수 없다. API로 병합하면서 스택 기능을 이용하려면 비동기 병합 API를 써야 한다.
자세한 내용은 스택 PR 안내와 CLI 명령어 문서를 참고하면 된다. 빠른 시작 안내와 조직에 기능을 도입하는 안내도 제공한다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요