Resolve a conflict
A gitq sync that hits a conflict does not fail. It stops, writes down where it stopped, and waits. This page is one real run of that loop, start to finish: a two branch stack, two separate conflicts, and the exact output at every step.
Absorb uncommitted changes
You have been editing across a stack and now the working tree holds changes belonging to three different branches. gitq absorb works out which branch owns each dirty file, folds the change into that branch, and restacks everything below it. One command instead of a stash, four checkouts, four amends, and a manual rebase.
Restructure a stack
sync rebases a stack. It never changes its shape. Changing the shape is surgery Absorb uncommitted changes.
Work in a worktree pool
Some setups do not have one checkout of a repo. They have a parent directory full of them what gitq does differently when it detects a pool, and what changes when a stack's branches are spread across several worktrees instead of living only in the one you happen to be sitting in.
Publish a stack
gitq publish turns the local-only branches in a stack into a chain of merge requests, each one targeting the branch below it, and keeps the MRs that already exist pointing at the right branch. Which forge it opens them on comes from the git remote's host, so the same command covers GitLab and GitHub. It is the only gitq command that talks to a network API, the only one that needs a token, and (inside the agent skill flow) the only one with a human gate in front of it.
Drive gitq with agents
gitq is a CLI you can drive by hand, and it is a CLI built to be driven by an agent. Four Claude skills wrap itsync, gitqabsorb, and gitq gitq does the git mechanics, deterministically, and the agent supplies the judgment gitq deliberately does not have an opinion about.
Recover from a mistake
This page is a decision list. Find the situation you're in, run the command next to it, and read the section below for what it actually does and does not undo. Every claim here is verified against source, and every terminal block came from a real run in a throwaway repo, with /Users/you/demo standing in for the repo and a fictional hash standing in for the real one in cache paths.