# Push Workflow

Execute via `git-manager` subagent.

## Pre-Push Checklist
1. All changes committed
2. Secrets scanned (see `safety-protocols.md`)
3. Branch pushed to remote

## Tool 1: Verify State
```bash
git status && \
git log origin/$(git rev-parse --abbrev-ref HEAD)..HEAD --oneline 2>/dev/null || echo "NO_UPSTREAM"
```

**If uncommitted changes:** Warn user, suggest commit first.
**If NO_UPSTREAM:** Use `git push -u origin HEAD`.

## Tool 2: Push
```bash
git push origin HEAD
```

**On success:** Report commit hashes pushed.

## Error Handling

| Error | Cause | Solution |
|-------|-------|----------|
| `rejected - non-fast-forward` | Remote has newer commits | `git pull --rebase`, resolve conflicts, push again |
| `no upstream branch` | Branch not tracked | `git push -u origin HEAD` |
| `Authentication failed` | Invalid credentials | Check `gh auth status` or SSH keys |
| `Repository not found` | Wrong remote URL | Verify `git remote -v` |
| `Permission denied` | No write access | Check repository permissions |

## Force Push (DANGER)

**NEVER force push to main/master/production branches.**

If user explicitly requests force push on feature branch:
```bash
git push -f origin HEAD
```

**Warn user:** "Force push rewrites history. Collaborators may lose work."

## Output Format
```
✓ pushed: N commits to origin/{branch}
  - abc123 feat(auth): add login
  - def456 fix(api): resolve timeout
```
