Para compreender os commits, é preciso primeiro visualizar as três zonas pelas quais o Git faz transitar os seus ficheiros.
| Zona | Descrição | Comando para entrar |
|---|---|---|
| Diretório de trabalho | Os seus ficheiros tal como os edita | (edição direta) |
| Zona de staging (index) | As alterações que prepara para gravar | git add |
| Repositório local | O histórico permanente dos commits | git commit |
Analogia: preparar um pacote. O diretório de trabalho é a sua secretária em desordem; a zona de staging é a caixa onde coloca o que quer enviar; o commit é o momento em que sela a caixa e a arquiva.
Para transformar uma pasta comum num repositório Git:
# Colocar-se na pasta do projeto
cd mon-projet
# Inicializar o repositório
git initIsto cria uma subpasta oculta .git/ que contém todo o histórico e a configuração do repositório.
# Verificar o estado do repositório recém-criado
git status⚠️ Nunca apague a pasta
.git/: ela contém todo o histórico. Apagá-la equivale a perder o versionamento (mas não os ficheiros atuais).
🔧 Mini-exercício — Escreva o comando que transforma a pasta corrente num repositório Git, depois o que mostra o seu estado.
git init
git statusUm ficheiro pode estar seguido (tracked) ou não seguido (untracked) pelo Git.
# Preparar um ficheiro preciso
git add fichier.txt
# Preparar todas as alterações da pasta
git add .
# Ver o estado (seguido / não seguido / preparado)
git status| Comando | Efeito |
|---|---|
git add fichier.txt | Prepara um ficheiro preciso |
git add . | Prepara todos os ficheiros modificados/novos |
git restore --staged fichier.txt | Retira um ficheiro da zona de staging |
git status | Mostra o estado de cada ficheiro |
git statusé o seu melhor aliado: use-o antes e depois de cadagit addpara ver exatamente o que o Git se prepara para gravar.
🔧 Mini-exercício — Acabou de modificar index.html e style.css. Escreva o comando que prepara (stage) apenas index.html.
git add index.htmlUm commit é um instantâneo (snapshot) do seu projeto num dado momento, acompanhado de uma mensagem que explica a alteração.
# Preparar e depois gravar
git add .
git commit -m "Adiciona a página inicial"Cada commit possui:
| Elemento | Descrição |
|---|---|
| Um identificador (hash) | Ex. a1b2c3d… — único |
| Um autor | O seu nome + correio (configuração da lição 03) |
| Uma data | Carimbo temporal do commit |
| Uma mensagem | A descrição da alteração |
| Um pai | O commit anterior (cadeia de histórico) |
# Ver o histórico dos commits
git log
git log --oneline # versão compactaUm bom commit é atómico: faz uma só coisa coerente. Evite o commit saco-de-gato « um monte de coisas » — prefira vários commits pequenos e claros.
🔧 Mini-exercício — Prepare todas as suas alterações e crie um commit cuja mensagem é « Adiciona a página de contacto ».
git add .
git commit -m "Adiciona a página de contacto"A mensagem de commit conta a história do projeto. Uma boa mensagem poupa horas a toda a equipa (e a si próprio daqui a 6 meses).
| ❌ Má mensagem | ✅ Boa mensagem |
|---|---|
update | Atualiza a dependência Maven para 3.9 |
fix bug | Corrige o crash no arranque se a configuração estiver ausente |
wip | Adiciona a validação do formulário de início de sessão |
feat: adiciona a autenticação por token
fix: corrige a paginação dos resultados
docs: completa o README de instalaçãoTruque mnemónico: uma boa mensagem deve completar a frase « Se eu aplicar este commit, ele vai… ». Exemplo: « …adicionar a página inicial ».
Alguns ficheiros nunca devem ser versionados: ficheiros temporários, dependências volumosas, segredos, ficheiros compilados. O ficheiro .gitignore indica ao Git que os ignore.
# Exemplo de conteúdo de um ficheiro .gitignore
target/
node_modules/
*.log
.env
.DS_Store| A ignorar | Porquê |
|---|---|
node_modules/, target/ | Reconstruídos automaticamente, volumosos |
.env, *.key | Segredos — nunca no Git! |
*.log, *.tmp | Ficheiros temporários sem valor |
⚠️ Regra de ouro de segurança: nunca faça commit de palavras-passe, chaves API ou segredos. Uma vez no histórico Git, um segredo fica lá — mesmo que o apague mais tarde. Coloque
.envno.gitignoredesde o início.
🔧 Mini-exercício — Escreva a linha a acrescentar num .gitignore para impedir o Git de versionar o ficheiro de segredos .env.
.envQual o comando que transforma uma pasta comum num repositório Git?
a) git start
b) git init
c) git new
d) git create
✅ Resposta: b) — git init cria a subpasta .git/ que contém o histórico e faz da pasta um repositório.
Qual é a ordem correta das três zonas do Git?
a) Repositório → staging → diretório de trabalho
b) Diretório de trabalho → staging → repositório local
c) Staging → repositório → diretório de trabalho
d) Diretório de trabalho → repositório → staging
✅ Resposta: b) — Edita-se (diretório de trabalho), prepara-se com git add (staging), depois grava-se com git commit (repositório local).
Para que serve git add?
a) Para criar um commit
b) Para preparar alterações na zona de staging
c) Para apagar um ficheiro
d) Para enviar o código para o GitHub
✅ Resposta: b) — git add desloca as alterações do diretório de trabalho para a zona de staging, antes do commit.
Qual é uma boa mensagem de commit?
a) truc
b) wip
c) Corrige o crash no arranque se a configuração estiver ausente
d) .
✅ Resposta: c) — É clara, no imperativo, e explica a alteração. As outras são vagas e inúteis no histórico.
Por que usar um .gitignore?
a) Para acelerar o computador
b) Para impedir o Git de versionar certos ficheiros (temporários, segredos, dependências)
c) Para apagar o histórico
d) Para ignorar os commits
✅ Resposta: b) — .gitignore lista os ficheiros que o Git deve ignorar, nomeadamente os segredos (.env) e as pastas reconstruíveis (node_modules/).
Crie um repositório local, adicione um ficheiro, ignore um ficheiro secreto e faça dois commits limpos.
# 1. Criar e entrar na pasta
mkdir mon-premier-depot
cd mon-premier-depot
# 2. Inicializar o repositório
git init
# 3. Criar um ficheiro de conteúdo e um .gitignore
echo "# O meu projeto" > README.md
echo ".env" > .gitignore
echo "SECRET=123" > .env # este ficheiro deve ser ignorado
# 4. Verificar o estado (.env NÃO deve aparecer)
git status
# 5. Primeiro commit
git add README.md .gitignore
git commit -m "Inicializa o projeto com README e gitignore"
# 6. Modificar e depois segundo commit
echo "Descrição do projeto" >> README.md
git add README.md
git commit -m "Completa a descrição no README"
# 7. Consultar o histórico
git log --onelineResultado esperado:
b2c3d4e Completa a descrição no README
a1b2c3d Inicializa o projeto com README e gitignoreVerifique que
.envnunca aparece emgit status: é a prova de que o seu.gitignorefunciona e de que o seu segredo está protegido.
git add) → repositório local (git commit).git init cria o repositório (pasta .git/)..gitignore protege os segredos e exclui os ficheiros inúteis.Lição 07 — Branches e histórico: trabalhar em várias versões em paralelo sem estragar a versão principal.
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