Cursor Origin, 스택 PR 됩니다. 근데 문서에 없습니다 (--stack-on 사용법)

Edward·3일 전

Cursor Origin

목록 보기
1/1
post-thumbnail

Cursor의 Git forge인 Origin이 8월 17일 베타로 열렸습니다. 직접 써보다가 발견한 게 하나 있습니다. 스택 PR(stacked PR)이 이미 완전히 동작합니다. 근데 플래그가 공식 문서 어디에도 없습니다.

아래 내용 전부, 현재 Origin CLI 버전(2026.08.15-22-58-04-922a05a)에서 직접 테스트한 결과입니다.

스택 PR이 뭔가요

큰 변경을 작은 PR 여러 개로 쪼개서 위에 쌓는 방식입니다. PR 2가 PR 1 위에 쌓이면, 리뷰어는 각 단계의 변경만 봅니다. 머지는 아래부터 순서대로.

원래는 Graphite 같은 도구를 GitHub 위에 얹어서 쓰던 방식이었습니다. 지금은 상황이 달라졌습니다. GitHub도 7월 30일 스택 PR을 퍼블릭 프리뷰로 공개했고, Origin도 베타에 자체 기능으로 들어 있습니다.

차이는 문서입니다. GitHub은 공식 문서에 gh stack CLI까지 공개했습니다. Origin은 기능이 동작하는데 플래그가 문서에 없습니다. 에이전트가 PR을 대량으로 쏟아내는 환경을 전제로 만든 forge니까 스택 PR은 자연스러운 선택인데, 문서가 아직 못 따라온 모양새입니다.

플래그는 있는데 문서에는 없습니다

핵심 문법은 이겁니다:

origin pr create --stack-on <PR번호>

값은 부모 PR 번호입니다. 그리고 자식 브랜치는 main이 아니라 부모 브랜치에서 따야 합니다.

근데 이 플래그, 두 군데 모두에서 빠져 있습니다.

  • 공식 CLI 레퍼런스의 create 옵션 표: 옵션 12개가 나열돼 있고 --stack-on은 없습니다
  • origin pr create --help: 옵션 목록에 없습니다. --base 플래그 설명 안에 "the --stack-on parent's head branch, else the repo default branch"라는 문장으로만 살아있어요

하나 더. 같은 --base 플래그인데 설명이 두 곳에서 다릅니다. 공개 문서는 "repo 기본 브랜치가 기본값"이라고 하고, 바이너리의 --help는 "--stack-on 부모의 head 브랜치, 없으면 기본 브랜치"라고 합니다.

실제로 돌려보면

--stack-on으로 PR을 만들면 PR 화면에 스택 패널이 뜹니다. 아래 PR과 위 PR이 트리로 표시되고, 준비가 되면 "Ready to merge as stack"과 "Merge 2 PRs" 버튼이 보입니다.

주의: restack은 자동이 아닙니다

CLI 팁에는 Origin이 source of truth인 repo에서는 자동으로 restack된다고 적혀 있습니다. 아니었습니다.

부모 브랜치에 커밋을 하나 더 푸시했더니 위 PR에 "Needs restack" 배너가 떴습니다. 자동으로 풀리지 않았습니다. 버튼을 눌러야 하고, 누르면 서버에서 rebase가 돕니다.

버튼이 동작할 때는 깔끔합니다. "Stack updated" 토스트가 뜨고, rebase라서 커밋 해시는 새로 잡힙니다.

충돌이 나면 버튼은 포기합니다

부모의 변경이 자식과 충돌하면 Restack 버튼이 실패합니다. 대신 충돌 파일명을 알려줍니다. 이건 Origin이 잘못한 게 아니라 맞는 동작입니다. 진짜 내용 충돌은 사람이 봐야 하니까요.

이 경우엔 로컬에서 풀면 됩니다.

git checkout <자식-브랜치>
git rebase <부모-브랜치>
# 충돌 해결 후
git add <파일>
git rebase --continue
git push --force-with-lease

rebase는 커밋을 새로 쓰기 때문에 일반 push는 거부됩니다. --force가 아니라 --force-with-lease를 쓰세요. 마지막 fetch 이후 다른 사람이 그 브랜치에 푸시했으면 거부해 줍니다.

정리

  • 기능은 동작합니다. 망가진 게 아니라 문서가 못 따라온 쪽입니다.
  • restack은 버튼입니다. 자동이라는 팁 문구를 믿지 마세요.
  • 충돌이 나면 버튼은 포기합니다. 로컬 rebase 후 --force-with-lease로 푸시하세요.

전체 과정 스크린샷이랑 명령어는 GitHub에 정리해 뒀습니다: https://github.com/aiedwardyi/awesome-origin (guides/stacked-prs.md)

베타라 언제든 바뀔 수 있습니다. 바뀐 부분 발견하시면 댓글로 알려주세요. Origin 관련 글은 계속 올릴 예정입니다.

profile
Cursor Origin을 직접 써보고 기록합니다

0개의 댓글