{"record":{"id":"408c9ff81ba30f94","repo":"nikivdev/code","slug":"specify-a-bookmark-or-pass-all","errorCode":null,"errorMessage":"Specify a bookmark or pass --all","messagePattern":"Specify a bookmark or pass --all","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/jj.rs","lineNumber":257,"sourceCode":"}\n\nfn run_rebase(opts: JjRebaseOpts) -> Result<()> {\n    let ctx = current_context()?;\n    ensure_git_not_busy(&ctx.repo_root)?;\n    let remote = default_remote(&ctx.repo_root);\n    let dest = opts.dest.unwrap_or_else(|| default_branch(&ctx.repo_root));\n    let target = resolve_rebase_target(&ctx.workspace_root, &dest, &remote);\n    jj_run_in(&ctx.workspace_root, &[\"rebase\", \"-d\", &target.target])\n}\n\nfn run_push(opts: JjPushOpts) -> Result<()> {\n    let ctx = current_context()?;\n    ensure_git_not_busy(&ctx.repo_root)?;\n    if opts.all {\n        return jj_run_in(&ctx.workspace_root, &[\"git\", \"push\", \"--all\"]);\n    }\n    let Some(bookmark) = opts.bookmark else {\n        bail!(\"Specify a bookmark or pass --all\");\n    };\n    jj_run_in(\n        &ctx.workspace_root,\n        &[\"git\", \"push\", \"--bookmark\", &bookmark],\n    )\n}\n\nfn run_sync(opts: JjSyncOpts) -> Result<()> {\n    let ctx = current_context()?;\n    ensure_git_not_busy(&ctx.repo_root)?;\n    let snapshot = collect_status_snapshot(&ctx)?;\n    let remote = opts\n        .remote\n        .unwrap_or_else(|| default_remote(&ctx.repo_root));\n    let dest = opts.dest.unwrap_or_else(|| default_branch(&ctx.repo_root));\n    let initial_target = resolve_rebase_target(&ctx.workspace_root, &dest, &remote);\n    let sync_plan = build_sync_plan(\n        &snapshot,","sourceCodeStart":239,"sourceCodeEnd":275,"githubUrl":"https://github.com/nikivdev/code/blob/a747e741ae92c09071d0ae946ab48488adcff1ce/src/jj.rs#L239-L275","documentation":"`flow push` requires you to say what to push. The wrapper refuses to guess: with --all it delegates to `jj git push --all`, otherwise it pushes a single named bookmark. If neither is supplied it throws this error instead of defaulting to pushing everything, which could publish unintended refs.","triggerScenarios":"Running `flow push` with neither a bookmark option nor the --all flag, i.e. opts.bookmark is None and opts.all is false in run_push.","commonSituations":"Typing `flow push` out of habit from git muscle memory (git push defaults to something sensible); forgetting the bookmark name flag; scripting the push without conditional args.","solutions":["Pass the bookmark: `flow push --bookmark <name>` (or positional per CLI usage).","If you truly want every ref published, run `flow push --all`.","Run `jj bookmark list` first to find the bookmark you intend to push."],"exampleFix":"// before\nflow push\n// after\nflow push --bookmark main\n// or\nflow push --all","handlingStrategy":"validation","validationCode":"// shell\nif [ -z \"$BOOKMARK\" ] && [ \"$ALL\" != \"1\" ]; then echo \"need --bookmark <name> or --all\" >&2; exit 2; fi","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always pass --bookmark explicitly in scripts.","Use --all only for publishing every ref deliberately.","Alias `flow push` to include a default bookmark if your workflow pushes one branch."],"tags":["cli","arguments","jj","git-push"],"backgroundTag":"missing-required-argument","analyzedSha":"a747e741ae92c09071d0ae946ab48488adcff1ce","analyzedAt":"2026-09-01T22:43:55.719Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}