Arquitetura de Dados do Git
Para utilizar o Git de forma eficiente, é fundamental compreender os quatro estados principais de um arquivo no ciclo de vida do versionamento:
- Working Tree (Diretório de Trabalho): Local onde os arquivos são editados atualmente. Contém modificações que ainda não foram preparadas para commit.
- Staging Area (Index): Área de preparação onde as mudanças são marcadas para serem incluídas no próximo snapshot (commit).
- Local Repository (Repositório Local): Onde os commits são armazenados permanentemente na sua máquina após a confirmação.
- Remote Repository (Repositório Remoto): Versão do projeto hospedada em servidores como GitHub, GitLab ou Bitbucket.
O HEAD atua como um ponteiro móvel que indica em qual branch ou versão o seu diretório de trabalho se encontra no momento.
Configuração de Ambiente
Antes de iniciar as contribuições, configure sua identiadde global no sistema:
# Define o nome de usuário e e-mail global
git config --global user.name "Seu Nome"
git config --global user.email "seuemail@exemplo.com"
# Visualiza as configurações ativas
git config --list
# Remove uma configuração específica
git config --global --unset user.name
Obtenção de Projetos
Para baixar um repositório existente para sua máquina local:
# Clona o repositório completo (branch padrão)
git clone <url_do_repositorio>
# Clona apenas uma branch específica
git clone -b develop <url_do_repositorio>
Manipulação de Arquivos e Staging
Gerencie quais alterações devem ser levadas para o próximo commit:
# Adiciona arquivos específicos ao Index
git add index.html script.js
# Adiciona um diretório completo, incluindo subpastas
git add ./src
# Adiciona todas as modificações do diretório atual
git add .
# Adiciona partes de arquivos de forma interativa
git add -p
# Remove arquivos do diretório de trabalho e do Index
git rm arquivo_obsoleto.log
# Remove do Index mas mantém o arquivo no diretório de trabalho
git rm --cached configuracao.local
Consolidação de Alterações (Commit)
Registre as mudanças preparadas no repositório local:
# Commit básico com mensagem descritiva
git commit -m "Refatoração do módulo de autenticação"
# Pula a área de staging e commita todas as alterações de arquivos rastreados
git commit -a -m "Correção rápida de bug no CSS"
# Altera a mensagem do último commit ou adiciona novos arquivos a ele
git commit --amend -m "Mensagem corrigida do último commit"
Sincronização com Repositórios Remotos
Envie e receba atualizações de servidores externos:
# Envia a branch local para o servidor remoto
git push origin feature/novo-layout
# Envia e define o rastreamento (upstream) para commits futuros simples
git push -u origin main
# Busca atualizações do servidor sem mesclar com o código local
git fetch origin
# Baixa atualizações e tenta mesclar automaticamente na branch atual
git pull origin main
Gerenciamento de Branches
Organize o desenvolvimento em diferentes linhas de trabalho:
# Lista branches locais (* indica a atual)
git branch
# Lista todas as branches (locais e remotas)
git branch -a
# Cria uma nova branch a partir da atual
git branch feature/pagamento
# Renomeia uma branch
git branch -m nome-antigo nome-novo
# Exclui uma branch local que já foi mesclada
git branch -d feature/temp
# Alterna para uma branch existente
git checkout develop
# Cria uma nova branch e alterna para ela imediatamente
git checkout -b fix/header-mobile
Inspeção e Comparação de Versões
Monitore o estado do projeto e identifique diferenças entre versões:
# Exibe o status atual dos arquivos (modificados, preparados, não rastreados)
git status
# Mostra o histórico de commits de forma simplificada
git log --oneline
# Exibe as alterações detalhadas de um commit específico
git show <hash_do_commit>
# Compara o diretório de trabalho com a Staging Area
git diff
# Compara a Staging Area com o Repositório Local (último commit)
git diff --cached
# Compara duas branches distintas
git diff main..develop
Desfazendo Alterações e Recuperação
O Git oferece diversas formas de reverter ações indesejadas:
# Restaura um arquivo para o estado do último commit (descarta mudanças locais)
git checkout -- config.json
# Remove um arquivo da área de staging, mantendo as alterações no diretório
git reset HEAD README.md
# Reverte o repositório local para um commit específico (mantém arquivos alterados)
git reset --soft <hash_do_commit>
# Reverte TUDO para um commit específico (apaga mudanças não salvas - use com cautela)
git reset --hard <hash_do_commit>
# Cria um novo commit que desfaz as alterações de um commit anterior (histórico seguro)
git revert <hash_do_commit>
Uso do Stash para Armazenamento Temporário
Útil para trocar de branch rapidamente sem precisar fazer um commit incompleto:
# Guarda as alterações atuais em uma pilha temporária
git stash
# Lista todos os itens guardados no stash
git stash list
# Recupera as alterações e as remove da pilha
git stash pop
# Aplica as alterações de um stash específico sem removê-lo
git stash apply stash@{0}
Gestão de Tags
Marque pontos importantes na história do projeto, como lançamentos de versão:
# Lista todas as tags existentes
git tag
# Cria uma tag leve na versão atual
git tag v1.0.0
# Remove uma tag local
git tag -d v1.0.0
# Envia tags para o servidor remoto
git push origin --tags
Trabalhando com .gitingore
Para evitar que arquivos irrelevantes (logs, dependências, senhas) sejam rastreados:
- Crie um arquivo chamado
.gitignorena raiz do projeto. - Adicione padrões como
*.logounode_modules/. - Se um arquivo já estiver sendo rastreado e você deseja ignorá-lo: ```
git rm -r --cached .
git add .
git commit -m "Atualizando regras do .gitignore"