Git Push
Publish local commits to origin — but only when the branch is current with the remote. If the remote moved, integrate first with git-sync, then push. A push is never forced.
Prerequisites
Commit first. If the working tree has uncommitted changes, run git-commit or report what is still dirty.
Workflow
Step 1: Verify repo and remote
git remote get-url origin
git branch --show-current
If no origin remote, stop: "No remote configured. Add one with: git remote add origin "
Step 2: Fetch and measure state
git fetch origin
git rev-list --left-right --count @{u}...HEAD # output: "<behind> <ahead>"
The rev-list line prints behind then ahead. Decide on the numbers:
behind = 0,ahead = 0— stop: "Already up to date with remote — nothing to push." (If@{u}errors because no upstream is set, the branch is new — go straight to Step 3, which sets the upstream.)behind > 0(the remote has commits the local branch doesn't, whether or not it is also ahead) — stop and do not push. Report: "Remote has N commits you don't have. Run git-sync first to integrate them (it will fast-forward or merge), then push." A push now would be rejected — do not attempt it.behind = 0,ahead > 0— clear to push. Continue to Step 3.
Step 3: Push
If the branch has no upstream:
git push -u origin HEAD
If an upstream exists:
git push
Never git push --force or --force-with-lease.
Step 4: Verify
git fetch origin && git rev-list --left-right --count @{u}...HEAD
Confirm behind = 0, ahead = 0 — local matches remote. Report: branch, remote URL, number of commits pushed.
Guardrails
- Never force-push.
- Never push while behind — integrate via
git-syncfirst. - Never push secrets — if
.envor credential files appear in the outgoing commits, stop and warn. - If the push is rejected for another reason (auth, pre-receive hook), report the error verbatim. Do not force.
Order
Ordering across operations is owned by blake-os:git-ops.