Landing Requests
Landing Requests (LRs) are JJHub’s native replacement for Pull Requests. They’re built from the ground up for jj’s stacked changes model - stable Change IDs, first-class conflict tracking, and automatic rebasing.Landing Requests vs Pull Requests
| Aspect | Pull Requests (GitHub) | Landing Requests (JJHub) |
|---|---|---|
| Identity | Tied to branch name | Tied to stable Change IDs |
| Stacked changes | Painful (rebase chains) | First-class (--stack flag) |
| Conflicts | Block merge | Tracked, work continues |
| Rebase | Changes commit hashes | Change IDs survive |
| Landing queue | Basic merge queue | Programmable (TypeScript) |
Create a Landing Request
| Flag | Description |
|---|---|
-t, --title <text> | LR title |
-b, --body <text> | LR description |
--target <bookmark> | Target bookmark (default: main) |
--change-id <id> | Explicit change ID(s), repeatable |
--stack | Include the full stack of changes |
Landing a Stack
When you’re working with stacked changes, use--stack to include the entire chain:
stack_size and all change_ids in the stack.
List Landing Requests
View a Landing Request
Review
Check CI Status
Merge
Programmable Landing Queue
The landing queue is programmable via TypeScript workflows. By default, it serializes merges (one at a time), but you can configure custom merge strategies:Lifecycle
- Create - Author opens an LR with
jjhub land create - Review - Team reviews with
jjhub land review - CI Checks - Automated workflows validate the changes
- Merge - Author or maintainer lands with
jjhub land merge