With jujutsu, which I'd recommend over git whether you're new to it or a git veteran of 18 years like myself, some common aliases have emerged to replace running multiple commands. I've made a few changes on my main branch here:

A few changes on top of `trunk()`

You could do:

jj b s main -r oo    # shorthand for jj bookmark set
jj git push -r oo    # i have jj git push aliased to jjp

But that requires knowing or looking up the bookmark name and the change ID you want to use as well as typing out two commands.

jj tug is an alias in common use that moves the closest bookmark to the closest pushable change. This means, in normal cases, you don't need to look up or type either the bookmark name or the change ID, it just does what you want. And then I'd still need to run jj git push for that revision.

So a quick update is to tug and push:

# tugp - tug, then push the revision the bookmark was moved to
tugp = ["util", "exec", "--", "bash", "-c", """
set -euo pipefail
jj tug
jj git push -r 'closest_pushable(@)'
""", ""]

Note, set -euo pipefail aborts from doing a push if the tug fails. Now jj tugp replaces two commands and saves me from checking bookmark names and change IDs, it just does what you want.

Update: jujutsu added a similar built-in. Use jj bookmark advance instead, with these additions to emulate the prior tug behavior:

[revset-aliases]
'closest_pushable(to)' = 'heads(::to & ~description(exact:"") & (~empty() | merges()))'

[revsets]
bookmark-advance-to = "closest_pushable(@)"

[aliases]
# bp - bookmark advance & push
bp = ["util", "exec", "--", "bash", "-c", """
set -euo pipefail
jj bookmark advance
jj git push -r 'closest_pushable(@)'
""", ""]