📘 Manual de Introdução

GitHub — Controlo de Versões

Git · GitHub · Colaboração · Open Source · Repositórios

Aprende a usar o Git e o GitHub para gerir o teu código, colaborar em equipa e contribuir para projectos open source — do zero ao avançado.

01

O que é o Git e o GitHub?

Conceitos fundamentais antes de começar

🗂️

Git

Sistema de controlo de versões distribuído criado por Linus Torvalds em 2005. Regista todas as alterações ao código ao longo do tempo, permitindo voltar a qualquer ponto anterior.

Ferramenta local · CLI
☁️

GitHub

Plataforma online que aloja repositórios Git. Adiciona ferramentas de colaboração — Pull Requests, Issues, Actions, Pages, etc. É onde vive a maioria dos projectos open source do mundo.

Plataforma cloud · github.com
📦

Repositório (Repository)

Um repositório (ou "repo") é a pasta do projecto rastreada pelo Git. Contém todos os ficheiros, histórico de commits e branches. Pode ser local (no teu computador) ou remoto (no GitHub).

Local · Remote
📸

Commit

Um commit é uma fotografia do estado dos ficheiros num determinado momento. Cada commit tem uma mensagem descritiva e um identificador único (hash SHA). É a unidade básica do histórico Git.

Snapshot · Hash SHA
🌿

Branch (Ramo)

Uma linha de desenvolvimento paralela. A branch principal chama-se main (ou master). Cria branches para desenvolver funcionalidades sem afectar o código estável.

main · feature · hotfix
🔀

Merge & Pull Request

Fundir os commits de uma branch noutra chama-se merge. No GitHub, este processo passa por um Pull Request — uma proposta de alteração que pode ser revista e aprovada pela equipa.

PR · Code Review
02

Primeiros Passos

Instalar, configurar e criar o teu primeiro repositório

configuração inicial — executa uma vez
# 1. Verificar se o Git está instalado $ git --version git version 2.43.0 ▸ configurar identidade (obrigatório) $ git config --global user.name "O Teu Nome" $ git config --global user.email "email@exemplo.com" $ git config --global core.editor "code --wait" # (substitui "code --wait" pelo teu editor preferido) ▸ verificar configuração $ git config --list user.name=O Teu Nome user.email=email@exemplo.com
criar ou clonar um repositório
# Opção A — iniciar um repo novo na pasta actual $ git init Initialized empty Git repository in /projecto/.git/ ▸ Opção B — clonar um repo existente do GitHub $ git clone https://github.com/utilizador/repositorio.git Cloning into 'repositorio'... remote: Enumerating objects: 142, done. Receiving objects: 100% (142/142), 48.20 KiB | 2.40 MiB/s, done. ▸ clonar numa pasta com nome diferente $ git clone https://github.com/utilizador/repo.git meu-projecto
Instalar o Git: Descarrega em git-scm.com. No macOS usa brew install git. Em Linux usa apt install git ou o gestor de pacotes da tua distribuição. Recomenda-se também instalar o GitHub Desktop (interface gráfica) ou a extensão GitLens no VS Code.
03

Comandos Git Essenciais

Referência completa dos comandos mais utilizados

Comando O que faz
📋 Estado e Informação
git statusMostra o estado actual do repositório — ficheiros modificados, staged e untracked.
git logLista o histórico de commits. Usa --oneline --graph para uma vista compacta em árvore.
git diffMostra as alterações ainda não adicionadas à staging area. Com --staged mostra o que está pronto para commit.
git show <hash>Detalha um commit específico — alterações, autor, data e mensagem.
➕ Staging e Commits
git add <ficheiro>Adiciona um ficheiro à staging area (prepara para commit).
git add .Adiciona todos os ficheiros alterados e novos à staging area.
git commit -m "msg"Cria um commit com a mensagem indicada. A mensagem deve ser clara e no imperativo.
git commit --amendAltera o último commit — útil para corrigir a mensagem ou adicionar ficheiros esquecidos.
🌐 Remoto (GitHub)
git remote -vLista os repositórios remotos configurados e os seus URLs.
git remote add origin <url>Liga o repositório local a um repositório remoto (normalmente chamado origin).
git push origin mainEnvia os commits locais para a branch main do repositório remoto.
git pull origin mainDescarrega e integra as alterações do remoto na branch actual.
git fetchDescarrega as alterações do remoto mas não as integra — permite inspeccionar antes de fazer merge.
↩️ Desfazer Alterações
git restore <ficheiro>Descarta as alterações de um ficheiro (não staged), voltando ao último commit.
git restore --staged <ficheiro>Remove um ficheiro da staging area sem perder as alterações.
git revert <hash>Cria um novo commit que desfaz as alterações de um commit anterior — seguro para histórico partilhado.
git reset --hard HEAD~1Apaga o último commit e todas as suas alterações. Usar com cuidado — é destrutivo!
ciclo básico de trabalho
# Ver o que mudou $ git status On branch main Changes not staged for commit: modified: index.html Untracked files: style.css ▸ adicionar e fazer commit $ git add . $ git commit -m "feat: adicionar estilos base ao index" [main 3a7f2c1] feat: adicionar estilos base ao index 2 files changed, 48 insertions(+), 3 deletions(-) ▸ enviar para o GitHub $ git push origin main Enumerating objects: 5, done. To https://github.com/utilizador/repo.git 1c4a2b0..3a7f2c1 main → main
04

Branches — Desenvolvimento Paralelo

Como trabalhar com ramos de desenvolvimento de forma eficaz

ComandoO que faz
git branchLista todas as branches locais. A branch activa tem um asterisco (*) à frente.
git branch -aLista branches locais e remotas.
git branch <nome>Cria uma nova branch a partir da branch actual (sem trocar para ela).
git switch <nome>Troca para a branch indicada. Substituto moderno de git checkout.
git switch -c <nome>Cria e troca imediatamente para a nova branch — equivale a branch + switch.
git merge <branch>Funde a branch indicada na branch actual. Cria um merge commit se houver divergência.
git rebase <branch>Reescreve o histórico aplicando os commits por cima da branch indicada — histórico mais limpo.
git branch -d <nome>Apaga uma branch local que já foi fundida. Usa -D para forçar.
git push origin --delete <nome>Apaga uma branch no repositório remoto.
Exemplo de estrutura de branches main── código estável em produção ├── feature/login-oauth── nova funcionalidade em desenvolvimento ├── feature/dark-mode── outra funcionalidade paralela └── hotfix/security-patch── correcção urgente do bug em produção
ciclo completo de feature branch
# Criar e trocar para uma nova branch de funcionalidade $ git switch -c feature/nova-funcionalidade Switched to a new branch 'feature/nova-funcionalidade' ▸ trabalhar, fazer commits... $ git add . && git commit -m "feat: implementar nova funcionalidade" ▸ enviar a branch para o GitHub e abrir Pull Request $ git push origin feature/nova-funcionalidade # Abre o GitHub e clica em "Compare & pull request" ▸ após aprovação do PR, fundir e limpar $ git switch main && git pull origin main $ git branch -d feature/nova-funcionalidade
05

Fluxo de Trabalho Completo

Do início de uma tarefa ao código em produção

📥

Clone / Pull

Obter a versão mais recente do código

🌿

Branch

Criar uma branch para a tarefa

✏️

Código

Desenvolver e testar localmente

📸

Commit

Guardar alterações com mensagem clara

☁️

Push

Enviar para o GitHub

🔀

Pull Request

Propor, rever e fundir o código

1
Actualizar o repositório local

Antes de começar qualquer trabalho, garante que tens o código mais recente. Nunca desenvolvas na branch main directamente.

git switch main  ·  git pull origin main
2
Criar uma branch descritiva

O nome da branch deve descrever a tarefa: feature/nome-funcionalidade, fix/nome-bug, docs/atualizar-readme. Segue as convenções da tua equipa.

git switch -c feature/nome-da-tarefa
3
Escrever código e fazer commits frequentes

Faz commits pequenos e frequentes, cada um com uma única responsabilidade. Usa prefixos convencionais: feat:, fix:, docs:, style:, refactor:, test:.

git add .  ·  git commit -m "feat: descrição clara"
4
Enviar a branch para o GitHub

Na primeira vez usa -u para ligar a branch local à remota — nas vezes seguintes basta git push.

git push -u origin feature/nome-da-tarefa
5
Abrir um Pull Request (PR)

No GitHub, clica em "Compare & pull request". Escreve uma descrição clara do que foi feito e porquê. Solicita revisão a colegas. O PR permite discussão de código, sugestões e aprovação antes do merge.

GitHub → Pull Requests → New Pull Request
6
Code Review e Merge

Após aprovação, faz o merge do PR no GitHub (Squash, Merge Commit ou Rebase). Apaga a branch remota. Localmente, volta à main, faz pull e apaga a branch local.

git switch main  ·  git pull  ·  git branch -d feature/…
⚠️ Regras de ouro: Nunca faças git push --force numa branch partilhada — isso reescreve o histórico dos outros. Nunca commites credenciais, passwords ou ficheiros .env — usa sempre um .gitignore apropriado.
06

Interface Web do GitHub

As principais secções e o que encontras em cada uma

Repositório

Code

Navegação no código fonte, visualização de ficheiros, histórico de commits por ficheiro e download do repositório.

Repositório

Issues

Sistema de rastreio de bugs, tarefas e pedidos de funcionalidades. Suporta labels, milestones, assignees e templates.

Repositório

Pull Requests

Lista e gestão de PRs abertos, em revisão e fechados. Inclui diff de código, comentários inline e histórico de revisões.

Repositório

Actions

CI/CD integrado — automatiza testes, builds e deployments com workflows YAML. Executa a cada push ou PR.

Repositório

Projects

Quadros Kanban e tabelas para gestão ágil de tarefas, ligados a Issues e Pull Requests do repositório.

Repositório

Wiki

Documentação extensa do projecto em Markdown. Ideal para guias de instalação, arquitectura e decisões de design.

Repositório

Settings

Configurações do repo: colaboradores, branch protection rules, webhooks, secrets e visibilidade público/privado.

Perfil

README de Perfil

Cria um repositório com o mesmo nome do teu username — o README.md aparece na tua página de perfil GitHub.

07

Colaboração e Open Source

Contribuir para projectos de outros e trabalhar em equipa

🍴

Fork

Cria uma cópia de um repositório na tua conta GitHub. Usada para contribuir para projectos onde não tens acesso de escrita — fazes alterações no teu fork e propões via Pull Request.

GitHub → Fork
🔄

Sync Fork

Manter o teu fork actualizado com o repositório original. Configura o upstream remoto e faz git pull upstream main regularmente para não ficares desactualizado.

git remote add upstream <url>
🏷️

Issues e Labels

Usa labels como bug, enhancement, good first issue para organizar. good first issue é especialmente importante para atrair novos contribuidores open source.

Issues → Labels
🔍

Code Review

No Pull Request, podes comentar linha a linha, sugerir alterações directamente (Suggest changes), aprovar ou solicitar modificações. É a base da qualidade em equipa.

PR → Review changes
📄

CONTRIBUTING.md

Ficheiro que descreve como contribuir para o projecto — guias de estilo, processo de PR, como reportar bugs e como executar os testes localmente.

Boa prática
🤖

GitHub Actions (CI/CD)

Automatiza tarefas com workflows YAML: executa testes a cada PR, faz build automático, deploy para produção após merge. Define-se em .github/workflows/.

Actions → Workflows
contribuir para um projecto open source
# 1. Fazer fork no GitHub (botão Fork na página do repo) # 2. Clonar o teu fork localmente $ git clone https://github.com/O-TEU-USER/projeto.git ▸ ligar ao repositório original (upstream) $ git remote add upstream https://github.com/original/projeto.git $ git remote -v origin https://github.com/O-TEU-USER/projeto.git (fetch) upstream https://github.com/original/projeto.git (fetch) ▸ manter actualizado antes de começar a trabalhar $ git fetch upstream && git merge upstream/main ▸ criar branch, fazer alterações, push e abrir PR no GitHub $ git switch -c fix/corrigir-typo-readme $ git add . && git commit -m "docs: corrigir erro de digitação no README" $ git push origin fix/corrigir-typo-readme
08

Atalhos e Dicas Avançadas

Truques que tornam o fluxo de trabalho muito mais rápido

stash
git stashGuarda alterações temporariamente sem commit — útil para trocar de branch
stash
git stash popRepõe as alterações guardadas no stash na branch actual
log
git log --oneline --graphVista compacta do histórico de commits em árvore
alias
git config --global alias.st statusCria atalhos personalizados para comandos longos
cherry
git cherry-pick <hash>Aplica um commit específico de outra branch na actual
bisect
git bisectEncontra automaticamente o commit que introduziu um bug por pesquisa binária
tag
git tag v1.0.0Marca uma versão específica — usada para releases e semantic versioning
.env
.gitignoreFicheiro que lista padrões de ficheiros que o Git deve ignorar — essencial em qualquer projecto

Atalhos de Teclado — Interface Web do GitHub

Abrir pesquisa de ficheiro
T
Ir para uma linha de código
L
Abrir paleta de comandos
Ctrl+K
Abrir repositório no github.dev
.
Atalhos de teclado (ajuda)
?
Copiar permalink de linha
Y
Navegar para Issues
GI
Navegar para Pull Requests
GP
Navegar para Code
GC
Navegar para Actions
GA
Pesquisa global no GitHub
S
Submeter comentário/formulário
Ctrl+Enter
💡 Dica — github.dev: Estando em qualquer repositório no GitHub, prime a tecla "." (ponto final) para abrir o repositório num editor VS Code directamente no browser — sem instalar nada. Ideal para edições rápidas e navegação de código.