---
id: push
agent: devops
title: Subir ao remoto (git push)
inputs: [story, branch atual, veredito do pre-push-quality-gate]
outputs: [commits no remoto, confirmação de push, caminho de rollback]
elicit: true
modes: [interactive]
---

# Subir ao remoto (git push)

**Objetivo:** executar `git push` para o remoto detectado, somente após o gate verde e a confirmação
humana explícita — com o caminho de reversão claro. Eu sou o único guardião da porta de saída.

**Pré-condições:**
- O `pre-push-quality-gate` deu **PASS**. Sem PASS, **pare** e rode o gate antes — não subo sobre gate
  não verificado.
- Existe branch com commits locais à frente do remoto. Se não há diferença, **pare** e reporte.

## Passos

1. **Detecte o contexto do repositório** — URL do remoto, branch atual e tracking. Nunca assuma repo
   fixo. Se for greenfield (sem git), **pare** e recomende `*environment-bootstrap`.
2. **Confirme o gate.** O `pre-push-quality-gate` foi PASS para este HEAD? Se o HEAD mudou desde o gate,
   re-rode o gate — não subo um estado não auditado.
3. **Revele o destino.** Mostre ao usuário: branch local → remoto/branch alvo, número de commits, e o
   resumo do diff (`git log --oneline origin/{branch}..HEAD`).
4. **[ELICITAÇÃO] Peça o "ok" explícito.** Apresento o resumo do gate (o que passou, o que avisou) e o
   destino. Só avanço com a confirmação humana — push é irreversível na prática.
5. **Bloqueie force na branch protegida.** Se o pedido for `--force` sobre `main`/`master`, **recuse**:
   histórico de branch protegida não se reescreve.
6. **Execute o push.** `git push` para o remoto/branch confirmado (com `-u` se a branch ainda não tem
   upstream). Para feature branch sem PR, sinalize que `*create-pr` é o próximo passo.
7. **Reporte e deixe o rollback claro.** Devolvo o resultado (branch atualizada, hash subido) e o
   caminho de reversão (ex.: o hash anterior do remoto para um eventual revert). Operação registrada.

## Critério de pronto (DoD)

- [ ] Gate pre-push confirmado como PASS para o HEAD subido
- [ ] Destino do push revelado (branch, nº de commits, resumo do diff)
- [ ] Confirmação humana explícita obtida antes de empurrar
- [ ] Push executado para o remoto detectado dinamicamente
- [ ] Resultado reportado com caminho de rollback explícito

## Falha / recuperação

- **Gate não está PASS** → não subo; devolvo ao `pre-push-quality-gate`.
- **Usuário não confirma** → cancelo o push, nada vai ao remoto.
- **Push rejeitado (non-fast-forward)** → reporto, oriento sincronizar (`git pull --rebase`) e
  re-rodar o gate; nunca resolvo com `--force` em branch protegida.
- **Segredo descoberto após o push** → escalo imediato: oriento revogar a credencial e limpar o
  histórico; segredo vazado não se desfaz só com revert.
