Skip to content

gh stack push advertises atomic updates but invokes git.Push with atomic disabled #216

Description

@tmchow

Summary

gh stack push is documented as pushing every active branch with --force-with-lease --atomic, but the command currently invokes the Git push layer with atomicity disabled.

This is present in both v0.0.8 and the current main branch.

Current behavior

runPush calls:

git.Push(remote, activeBranches, true, false)

The fourth argument is atomic, so this requests lease-protected pushing without --atomic:

The command test also explicitly expects atomic to be false:

Meanwhile, the command help and documentation say the operation uses --force-with-lease --atomic to provide all-or-nothing updates.

Impact

The explicit per-branch leases are strong and prevent overwriting unexpected remote changes. However, without --atomic, a multi-branch push may update some stack branches before another branch is rejected. That can leave the remote stack partially updated despite the documented all-or-nothing guarantee.

This distinction matters for automation that treats a rejected stack push as proof that no remote branch changed.

Expected behavior

gh stack push should pass atomic=true when pushing the active branches, consistent with its help text and documentation.

It would also be useful to add a test that rejects one ref in a multi-ref push and verifies that none of the remote refs update.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugBug Reportstopic: cli - push`gh stack push`: atomic-push bug, pre-commit/pre-push hooks, --no-verify, per-branch control.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions