Reproduction
Start with an existing three-PR stack whose local branches were rebased and therefore require force pushes, then run:
$ gh stack sync --remote origin
✓ Fetched latest dev from origin
✓ Trunk dev is already up to date
Pushing 3 branches to origin...
⚠ Push failed — branches may need force push after rebase
Run `gh stack push` to push with --force-with-lease.
Syncing PRs ...
✓ PR #4440 (...) — Open
✓ PR #4441 (...) — Open
✓ PR #4444 (...) — Open
⚠ Cannot create stack: Pull requests must form a stack, where each PR's base ref is the previous PR's head ref
Each PR's base branch must match the previous PR's head branch.
✓ Branches synced
Stacked on dev (a80f5ad)
$ echo $?
0
All three remote branch SHAs remained unchanged. The local stack was therefore not published, but sync continued into PR synchronization, printed a success receipt, and exited zero.
Expected
gh stack sync exits nonzero immediately when its atomic branch push fails. It does not attempt PR synchronization or print Branches synced, because the remote stack cannot match local state until the branch refs are updated.
Environment
- gh-stack v0.1.0
- gh 2.96.0
- git 2.50.1
- macOS arm64
Related
#346 covers suppressed git-hook output during gh stack push. This report is about sync swallowing the failed-push status and returning a false success.
Reactions are currently unavailable
Reproduction
Start with an existing three-PR stack whose local branches were rebased and therefore require force pushes, then run:
All three remote branch SHAs remained unchanged. The local stack was therefore not published, but sync continued into PR synchronization, printed a success receipt, and exited zero.
Expected
gh stack sync exits nonzero immediately when its atomic branch push fails. It does not attempt PR synchronization or print Branches synced, because the remote stack cannot match local state until the branch refs are updated.
Environment
Related
#346 covers suppressed git-hook output during gh stack push. This report is about sync swallowing the failed-push status and returning a false success.