| # | Secção |
|---|---|
| 1 | O que é uma pull request? |
| 2 | Criar uma pull request |
| 3 | A revisão de código |
| 4 | Fundir uma pull request |
| 5 | Boas práticas de PR |
| 6 | Quiz — As pull requests |
| 7 | Prática — Abrir e fundir uma PR |
| 8 | Síntese |
Uma pull request (PR), também chamada merge request no GitLab, é um pedido de integração: « eis o meu trabalho numa branch, por favor releiam-no e depois fundam-no em main ». É o ponto de encontro entre o código e a equipa.
Uma PR não é só um botão « fundir ». É um espaço de discussão em torno do código: comentários, sugestões, testes automáticos, validação. É aí que se joga a qualidade.
| Uma PR serve para… | Concretamente |
|---|---|
| Fazer reler o código | Um colega deteta bugs e melhorias |
| Disparar a CI | Testes + build automáticos na branch |
| Documentar a alteração | Título + descrição explicam o « porquê » |
| Rastrear a decisão | Quem aprovou, quando, porquê |
Antes de abrir uma PR, é preciso ter enviado a branch para o GitHub.
Etapa 1 — Enviar a branch:
git switch feature/recherche
git push -u origin feature/rechercheEtapa 2 — Abrir a PR (duas opções):
main) e a branch comparada (feature/recherche).# Cria a PR sem sair do terminal
gh pr create --base main --head feature/recherche \
--title "Adiciona a pesquisa" \
--body "Implementa a barra de pesquisa com filtros."Uma boa descrição de PR contém:
| Secção | Conteúdo |
|---|---|
| O quê | O que a PR faz, numa frase |
| Porquê | O problema ou necessidade resolvida |
| Como testar | Etapas para verificar |
| Ligação | Número da issue ligada (ex. Closes #42) |
O título e a descrição são lidos por pessoas com pressa. Seja explícito: « Corrige o crash no início de sessão » vale mil vezes mais do que « fix bug ».
🔧 Mini-exercício — A partir da branch corrente feature/recherche, crie uma pull request para main com gh, dando um título claro.
gh pr create --base main --head feature/recherche \
--title "Adiciona a pesquisa" --body "Implementa a barra de pesquisa."A revisão de código (code review) é o coração da PR: um ou vários colegas leem as alterações, fazem perguntas, sugerem melhorias e acabam por aprovar ou pedir alterações.
Os três vereditos possíveis no GitHub:
| Veredito | Significado |
|---|---|
| Approve | O código está bom, pode fundir-se |
| Request changes | São necessárias correções antes da fusão |
| Comment | Observações sem bloquear nem aprovar |
Do lado do autor, depois dos comentários, corrige-se e volta-se a enviar: a PR atualiza-se automaticamente.
# Corrigir na sequência da revisão
git switch feature/recherche
# ... alterações ...
git commit -am "Tem em conta os retornos da revisão"
git push # a PR atualiza-se sozinhaO que um bom reviewer olha:
A revisão de código não é um juízo sobre a pessoa, mas uma melhoria coletiva do produto. Critica-se o código, nunca o autor. E também se sublinha o que está bem feito.
Quando a PR está aprovada e a CI a verde, funde-se. O GitHub propõe três métodos, que mudam a forma do histórico.
| Método | O que faz | Quando usar |
|---|---|---|
| Create a merge commit | Cria um commit de fusão, guarda todos os commits da branch | Rastrear a branch inteira |
| Squash and merge | Esmaga todos os commits num único commit limpo | Histórico main claro e conciso |
| Rebase and merge | Reproduz os commits em main, sem commit de fusão | Histórico estritamente linear |
# Fundir a partir do terminal com o GitHub CLI
gh pr merge 42 --squash --delete-branchDepois da fusão, limpa-se:
# Apagar a branch remota (muitas vezes automático)
git push origin --delete feature/recherche
# Atualizar o local
git switch main
git pull origin main
# Apagar a branch local
git branch -d feature/rechercheO squash and merge é muito popular: uma funcionalidade = um commit limpo em
main. O histórico torna-se uma lista legível de funcionalidades, e não um emaranhado de « wip », « fix typo », « oups ».
🔧 Mini-exercício — Com gh, funda a PR número 42 em squash e apague a branch de seguida. Escreva o comando.
gh pr merge 42 --squash --delete-branch
Uma PR eficaz é uma PR pequena, clara e testada. Eis os hábitos das equipas performantes.
| Boa prática | Porquê |
|---|---|
| PR pequenas (< 400 linhas) | Mais fáceis e mais rápidas de reler |
| Uma PR = um assunto | Sem mistura « feature + refactor + typo » |
| Título + descrição claros | O reviewer compreende sem adivinhar |
Ligar a issue (Closes #N) | Rastreia a necessidade e fecha a issue na fusão |
| CI verde antes de pedir a revisão | Não se faz reler código partido |
| Responder a todos os comentários | Nada fica sem resposta |
# Ligar automaticamente uma issue na descrição
gh pr create --title "Adiciona exportação CSV" \
--body "Permite exportar os dados em CSV. Closes #57"Uma PR de 1 000 linhas recebe um « LGTM » (looks good to me) sem verdadeira releitura — ninguém tem coragem de ler tudo. Uma PR de 50 linhas recebe retornos preciosos. Pequeno = relido a sério.
🔧 Mini-exercício — Que palavra-chave acrescenta na descrição de uma PR para fechar automaticamente a issue #57 na fusão?
Closes #57 (as variantes Fixes #57 ou Resolves #57 também funcionam).
Para que serve uma pull request?
a) Para apagar uma branch
b) Para pedir a releitura e a integração de uma branch noutra
c) Para instalar o Git
d) Para clonar um repositório
✅ Resposta: b) — Uma PR pede a releitura do código de uma branch e depois a sua fusão (muitas vezes em main).
O que é preciso fazer antes de poder abrir uma PR no GitHub?
a) Apagar main
b) Enviar a branch para o repositório remoto (git push)
c) Fechar o terminal
d) Desativar a CI
✅ Resposta: b) — A branch tem de existir do lado remoto; envia-se com git push -u origin nom-de-branche.
O que significa « Request changes » numa revisão?
a) O código está aprovado
b) São necessárias correções antes da fusão
c) A PR é apagada
d) É criado um novo repositório
✅ Resposta: b) — O reviewer pede alterações; o autor corrige e volta a enviar, o que atualiza a PR.
Que método de fusão esmaga todos os commits da branch num só?
a) Create a merge commit
b) Squash and merge
c) Rebase and merge
d) Cherry-pick
✅ Resposta: b) — Squash and merge condensa todos os commits num único commit limpo em main.
Por que privilegiar pequenas pull requests?
a) Consomem menos disco
b) São relidas mais depressa e com mais seriedade
c) O GitHub torna-as obrigatórias
d) Evitam escrever testes
✅ Resposta: b) — Uma PR pequena é relida com atenção e rapidez; uma PR enorme recebe muitas vezes um « LGTM » sem verdadeira releitura.
Terminou uma funcionalidade na branch feature/footer. Realize o ciclo completo de uma pull request com o GitHub CLI (gh):
main com um título claro e uma ligação de issue (Closes #12).# 1. Enviar a branch
git switch feature/footer
git push -u origin feature/footer
# 2. Abrir a pull request
gh pr create --base main --head feature/footer \
--title "Adiciona o rodapé do sítio" \
--body "Adiciona um footer responsivo com ligações e menções legais. Closes #12"
# 3. Depois da aprovação: fusão em squash + apagar a branch
gh pr merge --squash --delete-branch
# 4. Atualizar o local
git switch main
git pull origin main
git branch -d feature/footerResultado esperado:
| Etapa | Verificação |
|---|---|
| PR criada | gh pr list mostra a PR aberta para main |
| Issue ligada | A descrição contém Closes #12 (fechará a issue na fusão) |
| Fusão squash | Um único commit « Adiciona o rodapé do sítio » aparece em main |
| Branch apagada | git branch já não lista feature/footer |
$ git log --oneline -1
a1b2c3d Adiciona o rodapé do sítio (#13)O número entre parênteses (
#13) é acrescentado automaticamente pelo GitHub: é o número da PR. Clicar nele leva a toda a discussão da revisão. Rastreabilidade total.
gh pr create.Domina o ciclo de contribuição no seu repositório. A lição 04 — Workflow colaborativo abre a colaboração mais ampla: fork, clone, issues e boas práticas de equipa.
Todos os direitos reservados. Qualquer reprodução, difusão, utilização ou adaptação deste curso, no todo ou em parte, é estritamente proibida sem a autorização escrita prévia do Dr. Haythem REHOUMA.
Curso criado por Dr. Haythem REHOUMA — Desenvolvimento e implementação de soluções de dados