Use GitHub to review, discuss, run checks, and merge. Use jj to edit the changes and their order, then jj-stack submit to publish the result.

Review, merge, and rebase on GitHub

You can comment, review, approve, request changes, add labels, request reviewers, and inspect or rerun checks normally. You can also merge through GitHub’s native stack UI or use Rebase stack. After a merge or rebase finishes, run:

jj-stack sync <head-change-id>
Scroll through the full transcript
# PR #1 was merged on GitHub
 jj-stack sync ktowyovw
Removing merged changes from the bottom of the stack: ktowyovw
Cleanup:
  ✓ remote branch: delete jj-stack/a-refactor-shared-model-ktowyovw@origin
  ✓ forget the saved link between PR #1 and ktowyovw
 jj log
@  nypnqqmq
  ktowyovw  A: refactor shared model
  tonmzkzq  base

~

Wait for a GitHub rebase or merge to finish before rewriting the same stack locally. After a GitHub rebase, jj-stack sync checks that rebasing your local changes produces the same contents as GitHub’s version. If they disagree, it stops and leaves the PR branches untouched. See merge and sync for the full workflow.

Titles, bodies, drafts, and labels

You can edit pull request titles and bodies on GitHub. On the next submit, jj-stack checks both against the text generated from the last submitted change. If both still match, it refreshes them from your local description. If either differs, it preserves both.

Use --describe to replace one body deliberately (or --describe-with or --edit for titles and bodies). See pull request descriptions for examples.

Existing PRs keep their draft state unless you submit with --draft=all, --open, or an edited draft choice from --edit. Plain --draft affects only new PRs.

Submitting can add labels and request reviewers, but it does not remove existing labels or reviewer requests. Set defaults or make explicit requests as described in submit and update.

Changes to avoid on GitHub

Let jj-stack manage its PR branches, whose names normally start with jj-stack/. Do not force-push, rename, or delete them. An unexpected branch change stops submission; see troubleshooting for recovery steps. GitHub’s Rebase stack operation is supported through jj-stack sync, as described above.

Do not change pull request bases or GitHub stack membership by hand. jj-stack submit derives both from the local jj history. To change the base or order, make that change locally and submit again. To remove the GitHub stack while leaving the PRs open, see separate a stack.

Do not enable auto-merge, shown as Merge when ready with a merge queue, on a pull request you will stack more changes on. GitHub refuses to add such a PR to a stack, so the next submit stops until you disable it.

For reviewer and repo configuration guidance, see review and merge a stack on GitHub.