Repositório local e commits

7 min

Índice


1 — As três zonas do Git

Para compreender os commits, é preciso primeiro visualizar as três zonas pelas quais o Git faz transitar os seus ficheiros.

ZonaDescriçãoComando para entrar
Diretório de trabalhoOs seus ficheiros tal como os edita(edição direta)
Zona de staging (index)As alterações que prepara para gravargit add
Repositório localO histórico permanente dos commitsgit 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.

↑ Voltar ao topo


2 — Inicializar um repositório local

Para transformar uma pasta comum num repositório Git:

bash
# Colocar-se na pasta do projeto
cd mon-projet

# Inicializar o repositório
git init

Isto cria uma subpasta oculta .git/ que contém todo o histórico e a configuração do repositório.

bash
# 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.

✅ Ver uma solução
bash
git init
git status

↑ Voltar ao topo


3 — Seguimento dos ficheiros

Um ficheiro pode estar seguido (tracked) ou não seguido (untracked) pelo Git.

bash
# 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
ComandoEfeito
git add fichier.txtPrepara um ficheiro preciso
git add .Prepara todos os ficheiros modificados/novos
git restore --staged fichier.txtRetira um ficheiro da zona de staging
git statusMostra o estado de cada ficheiro

git status é o seu melhor aliado: use-o antes e depois de cada git add para 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.

✅ Ver uma solução
bash
git add index.html

↑ Voltar ao topo


4 — Criar um commit

Um commit é um instantâneo (snapshot) do seu projeto num dado momento, acompanhado de uma mensagem que explica a alteração.

bash
# Preparar e depois gravar
git add .
git commit -m "Adiciona a página inicial"

Cada commit possui:

ElementoDescrição
Um identificador (hash)Ex. a1b2c3d… — único
Um autorO seu nome + correio (configuração da lição 03)
Uma dataCarimbo temporal do commit
Uma mensagemA descrição da alteração
Um paiO commit anterior (cadeia de histórico)
bash
# Ver o histórico dos commits
git log
git log --oneline   # versão compacta

Um 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 ».

✅ Ver uma solução
bash
git add .
git commit -m "Adiciona a página de contacto"

↑ Voltar ao topo


5 — Boas práticas de mensagens

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).

Regras de base

  • Escrever no imperativo presente: « Adiciona… », « Corrige… », « Remove… ».
  • Uma linha de resumo curta (≤ 50 caracteres), depois um corpo detalhado se necessário.
  • Explicar o porquê, não apenas o quê.

Comparação

❌ Má mensagem✅ Boa mensagem
updateAtualiza a dependência Maven para 3.9
fix bugCorrige o crash no arranque se a configuração estiver ausente
wipAdiciona a validação do formulário de início de sessão

Convenção habitual (Conventional Commits)

feat: adiciona a autenticação por token
fix: corrige a paginação dos resultados
docs: completa o README de instalação

Truque mnemónico: uma boa mensagem deve completar a frase « Se eu aplicar este commit, ele vai… ». Exemplo: « …adicionar a página inicial ».

↑ Voltar ao topo


6 — O ficheiro .gitignore

Alguns ficheiros nunca devem ser versionados: ficheiros temporários, dependências volumosas, segredos, ficheiros compilados. O ficheiro .gitignore indica ao Git que os ignore.

bash
# Exemplo de conteúdo de um ficheiro .gitignore
target/
node_modules/
*.log
.env
.DS_Store
A ignorarPorquê
node_modules/, target/Reconstruídos automaticamente, volumosos
.env, *.keySegredos — nunca no Git!
*.log, *.tmpFicheiros 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 .env no .gitignore desde o início.

🔧 Mini-exercício — Escreva a linha a acrescentar num .gitignore para impedir o Git de versionar o ficheiro de segredos .env.

✅ Ver uma solução
.env

↑ Voltar ao topo


7 — Quiz — Repositório local e commits

Question 1

Qual o comando que transforma uma pasta comum num repositório Git?

a) git start

b) git init

c) git new

d) git create

💡 Ver a solução

Resposta: b)git init cria a subpasta .git/ que contém o histórico e faz da pasta um repositório.


Question 2

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

💡 Ver a solução

Resposta: b) — Edita-se (diretório de trabalho), prepara-se com git add (staging), depois grava-se com git commit (repositório local).


Question 3

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

💡 Ver a solução

Resposta: b)git add desloca as alterações do diretório de trabalho para a zona de staging, antes do commit.


Question 4

Qual é uma boa mensagem de commit?

a) truc

b) wip

c) Corrige o crash no arranque se a configuração estiver ausente

d) .

💡 Ver a solução

Resposta: c) — É clara, no imperativo, e explica a alteração. As outras são vagas e inúteis no histórico.


Question 5

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

💡 Ver a solução

Resposta: b).gitignore lista os ficheiros que o Git deve ignorar, nomeadamente os segredos (.env) e as pastas reconstruíveis (node_modules/).

↑ Voltar ao topo


8 — Prática — O seu primeiro repositório

Instrução

Crie um repositório local, adicione um ficheiro, ignore um ficheiro secreto e faça dois commits limpos.


Correção — Sequência de comandos esperada

bash
# 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 --oneline

Resultado esperado:

b2c3d4e Completa a descrição no README
a1b2c3d Inicializa o projeto com README e gitignore

Verifique que .env nunca aparece em git status: é a prova de que o seu .gitignore funciona e de que o seu segredo está protegido.

↑ Voltar ao topo


9 — Síntese

Pontos a reter

  1. Três zonas: diretório de trabalho → staging (git add) → repositório local (git commit).
  2. git init cria o repositório (pasta .git/).
  3. Um commit é um instantâneo + uma mensagem, ligado ao commit pai.
  4. Boas mensagens: imperativo, claras, atómicas, a explicar o porquê.
  5. .gitignore protege os segredos e exclui os ficheiros inúteis.

A continuação

Lição 07 — Branches e histórico: trabalhar em várias versões em paralelo sem estragar a versão principal.

↑ Voltar ao topo


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