Today pr create --dry-run and pr resubmit --dry-run run git fetch, which moves refs/remotes/<remote>/<branch> and writes FETCH_HEAD, so a preview changes the checkout it claims only to describe.
This PR skips the fetch on a dry run and builds the plan from the remote-tracking refs already present, noting on stderr when they were last fetched, or saying to run git fetch <remote> when the ref is missing. With no base ref it prints what it can and names the commits, title, body and patch range it could not check. A real run still fetches.
🤖 Generated with Claude Code