Git é um sistema de controle de versão: ele registra a evolução dos arquivos de um projeto. GitHub é uma plataforma que hospeda repositórios Git e adiciona recursos de colaboração. Eles trabalham juntos, mas não são a mesma coisa. É possível usar Git sem internet e sem GitHub.
Repositório, alterações e histórico
Um repositório é um conjunto de arquivos acompanhado pelo Git. O sistema registra snapshots do projeto: arquivos podem estar sem alteração, modificados ou preparados na área de staging para o próximo registro. Um commit identifica um snapshot com autor, data, mensagem e relação com o histórico anterior. Ele não é apenas “salvar”: é registrar uma etapa coerente do trabalho.
Um fluxo básico e seguro
- Modificar: edite os arquivos necessários.
- Revisar: confira o que mudou.
- Preparar: selecione apenas as alterações relacionadas.
- Registrar: crie um commit com mensagem clara.
- Sincronizar: envie ao repositório remoto quando fizer sentido.
git status
git add nome-do-arquivo
git commit -m "Adiciona página de contato"
git push
git status deve ser consultado com frequência. Ele mostra a branch atual e o estado dos arquivos, reduzindo erros por falta de contexto.
Local e remoto
Clone cria uma cópia local de um repositório remoto. Push envia commits locais. Pull busca alterações e tenta integrá-las ao trabalho local. Antes de enviar, é importante buscar o que a equipe publicou para reduzir divergências.
Branches e merge
Uma branch é uma linha de desenvolvimento. Ela permite criar um recurso ou corrigir um defeito sem mexer imediatamente na linha principal. Quando o trabalho é revisado, suas mudanças podem ser integradas por merge.
Conflito ocorre quando o Git não consegue decidir sozinho como combinar alterações. Não é uma falha misteriosa: o arquivo mostra as partes concorrentes e uma pessoa deve escolher a versão correta, testar e registrar a resolução.
Pull request
Em plataformas como o GitHub, um pull request propõe integrar uma branch. Ele permite discutir, revisar arquivos, executar verificações automáticas e registrar decisões antes da mudança chegar à branch principal.
O que nunca deve ir para um repositório público?
- senhas e chaves privadas;
- arquivos com credenciais;
- dados pessoais de clientes ou estudantes;
- segredos de serviços externos;
- arquivos grandes gerados que não pertencem ao código.
Um arquivo .gitignore impede que padrões desnecessários sejam incluídos, mas não remove um segredo que já foi publicado. Nesse caso, a credencial precisa ser revogada e substituída.
Prática sem pressa
Crie uma pasta com um arquivo de texto, inicie um repositório, faça três alterações e registre cada uma com uma mensagem explicativa. Depois consulte o histórico e descreva como voltar mentalmente a cada etapa.
Laboratório local: construa um histórico que explique o projeto
Você pode praticar Git sem publicar nada. Crie uma pasta chamada lista-estudos, adicione um arquivo README.md com o objetivo do projeto e execute git init. Consulte git status antes e depois de cada etapa; esse hábito mostra exatamente o que será registrado.
git init
git status
git add README.md
git diff --staged
git commit -m "Documenta objetivo da lista de estudos"
Depois acrescente uma lista de três temas ao README, confira a diferença com git diff e faça um segundo commit. Corrija uma palavra e registre a correção separadamente. Ao final, use git log --oneline: as três mensagens devem permitir entender a evolução sem abrir os arquivos.
Experimento com branch
- Crie uma branch com
git switch -c adiciona-cronograma. - Inclua um cronograma no README e faça commit.
- Volte à branch principal com
git switch mainou ao nome indicado pelo seu repositório. - Observe que o cronograma não aparece nessa linha.
- Integre a mudança com
git merge adiciona-cronogramae confira novamente.
Antes de apagar uma branch, confirme no histórico que o commit foi integrado. O objetivo é compreender estados e relações, não decorar comandos.
Um projeto versionado ainda precisa de cópias recuperáveis. Entenda por que Git e hospedagem remota não substituem sozinhos um plano de backup.
Caso completo: duas pessoas alteram o mesmo projeto
Ana corrige o formulário enquanto Bruno melhora o relatório. Se ambos editarem diretamente a mesma versão e enviarem arquivos por mensagem, fica difícil saber qual cópia é a correta. Com Git, cada mudança pode ser registrada em uma branch e integrada de forma explícita.
git switch -c corrige-formulario
# editar e testar
git add formulario.html
git commit -m "Corrige validação do formulário"
git push -u origin corrige-formulario
O pull request não é apenas um botão de publicação: ele mostra a diferença, registra discussão e permite verificar o código antes de integrar. A documentação oficial do projeto está disponível gratuitamente no livro Pro Git.
Como entender um conflito
Conflito significa que o Git não conseguiu decidir sozinho como combinar alterações que atingem a mesma região. A pessoa precisa ler as duas intenções, produzir a versão correta, testar e então registrar a resolução. Aceitar sempre “a minha versão” ou “a versão deles” pode apagar trabalho válido.
- Leia o arquivo e identifique as marcações de conflito.
- Converse com quem produziu a outra alteração quando a intenção não estiver clara.
- Edite o resultado final e remova as marcações.
- Execute os testes ou abra a página afetada.
- Use
git adde conclua o commit da resolução.
Commits que explicam o projeto
Um bom commit representa uma mudança coerente e possui mensagem específica. “Corrige cálculo da comissão no fechamento” é mais útil do que “alterações”. Evite misturar formatação, nova funcionalidade e correção de erro no mesmo registro quando elas podem ser separadas.
Laboratório de revisão
Crie uma branch, faça duas alterações relacionadas, registre um commit e compare com a branch principal usando git diff main...HEAD. Escreva uma revisão com: objetivo, arquivos alterados, como testar e risco de regressão. Não inclua senhas, tokens ou arquivos de configuração privada.
Perguntas frequentes
GitHub é uma ferramenta de backup?
Ele mantém cópias e histórico, mas não substitui sozinho uma política de backup. Exclusões, credenciais, disponibilidade e regras do serviço ainda precisam ser consideradas.
Preciso decorar todos os comandos?
Não. Entenda o estado dos arquivos e o objetivo de cada etapa. A consulta correta é mais segura do que executar comandos decorados sem contexto.
Referências bibliográficas
Obras reconhecidas que fundamentam e aprofundam os conceitos apresentados neste artigo.
- CHACON, Scott; STRAUB, Ben. Pro Git . 2. ed. Apress, 2014.
- THOMAS, David; HUNT, Andrew. The Pragmatic Programmer . 20th Anniversary Edition. Addison-Wesley, 2019.