Git e Controle de Versão: Comandos Básicos e Fluxos de Trabalho
Git é a ferramenta fundamental do desenvolvimento de software moderno. Este guia cobre os comandos básicos do Git, estratégias de branching e fluxos de trabalho.
Atualizado em:O que é Git e por que usar?
Git é um sistema de controle de versão distribuído. Rastreia mudanças de código, gerencia diferentes versões e facilita a colaboração em equipe.
Estrutura distribuída: Cada desenvolvedor tem uma cópia completa do repositório. Isso permite trabalho offline e operações rápidas.
Branching: Crie branches separadas para diferentes funcionalidades ou correções. Isso mantém o código principal (main/master) sempre estável.
Merge e rebase: Mescle branches na branch principal. Merge preserva o histórico de commits. Rebase cria um histórico linear.
Comandos Básicos do Git
git init: Cria um novo repositório. git clone <url>: Copia um repositório existente.
git add <file>: Adiciona mudanças à área de staging. git add .: Adiciona todas as mudanças.
git commit -m "mensagem": Confirma as mudanças em staging. Escreva mensagens de commit significativas.
git status: Verifica o status do repositório. git log: Visualiza o histórico de commits.
git diff: Vê as diferenças entre o diretório de trabalho e a área de staging. git diff --staged: Vê as diferenças entre a área de staging e o último commit.
Branching e Merging
git branch <name>: Cria uma nova branch. git checkout <name> ou git switch <name>: Muda para a branch.
git merge <branch>: Mescla a branch na branch atual. Usa fast-forward merge ou three-way merge.
Conflito de merge: Resolução manual necessária para mudanças conflitantes. Edite os arquivos conflitantes, marque com git add, complete com git commit.
git branch -d <name>: Exclui a branch. git branch -D <name>: Força a exclusão de uma branch não mesclada.
Operações de Repositório Remoto
git remote add origin <url>: Adiciona repositório remoto. git remote -v: Lista os remotos.
git push origin <branch>: Envia mudanças locais para o remoto. git push -u origin main: Define a branch upstream.
git pull: Obtém e mescla mudanças remotas. git fetch: Obtém mudanças remotas (sem mesclar).
git push --force: Atualiza forçadamente a branch remota (usar com cuidado). git push --force-with-lease: Force push mais seguro.
Estratégias de Branching
Git Flow: main (produção), develop (desenvolvimento), feature/* (novas funcionalidades), release/* (preparação de versão), hotfix/* (correções urgentes).
GitHub Flow: branch main + branches de funcionalidades. Cada branch de funcionalidade é mesclada na main via pull request. Simples e efetivo.
Trunk-Based Development: Uma única branch main, branches de funcionalidades de curta duração (1-2 dias). Combinado com integração contínua (CI/CD).
Critérios de seleção: Git Flow para projetos grandes, GitHub Flow para projetos pequenos-médios, Trunk-Based Development para equipes com CI/CD maduro.
Melhores Práticas
Mensagens de commit: Use modo imperativo ('Add feature' não 'Added feature'). Limite a primeira linha a 50 caracteres, os detalhes a 72 caracteres.
Commits atômicos: Cada commit deve conter uma única mudança. Divida mudanças grandes em commits pequenos.
Nomenclatura de branches: Use nomes descritivos como feature/user-authentication, bugfix/login-error, hotfix/security-patch.
.gitignore: Ignore arquivos desnecessários (node_modules, .env, build/). Use os templates de gitignore do GitHub.
Pull request: Use pull requests para revisão de código. Cada mudança deve ser revisada por pelo menos uma pessoa.