O que é o Git?
O Git é um sistema de controle de versão: uma ferramenta que salva o histórico de mudanças do seu projeto. Ele permite ver o que mudou, quando e por que, voltar para uma versão anterior e colaborar com outras pessoas sem atrapalhar o trabalho umas das outras.
Não confunda Git (a ferramenta) com GitHub (um serviço web para hospedar repositórios Git na nuvem e colaborar). O Git funciona perfeitamente sem o GitHub; o GitHub é um dos muitos lugares onde você pode publicar seu repositório.
O fluxo básico: três zonas
O Git organiza seu trabalho em três zonas. Entender esse fluxo é a chave de tudo:
- Working directory (diretório de trabalho): seus arquivos do jeito que você os edita. É aqui que você escreve código.
- Staging area (área de preparação ou índice): uma "sala de espera" onde você coloca as mudanças que quer incluir na próxima foto.
- Repository (repositório): o histórico de commits. Cada commit é uma foto permanente do projeto em um dado momento.
[Working dir] --git add--> [Staging] --git commit--> [Repositório]
edita aqui prepara histórico
Comandos essenciais
git init # cria um repositório Git na pasta atual
git status # mostra quais arquivos mudaram e sua zona
git add arquivo.js # move um arquivo para o staging
git add . # move TODAS as mudanças para o staging
git commit -m "Mensagem" # cria uma foto com as mudanças preparadas
git log # lista o histórico de commits
git log --oneline # histórico resumido (uma linha por commit)
A mensagem de commit descreve o que e por que você mudou algo. Uma boa
mensagem está no presente imperativo: "Adiciona validação ao formulário de login".
Branches (ramos) e merge
Um branch (ramo) é uma linha de desenvolvimento independente. O branch principal
costuma se chamar main. Criar um branch te permite trabalhar em uma nova funcionalidade
sem mexer no código estável, e depois fundi-lo (merge) quando estiver
pronto.
git branch # lista os branches (o atual vem marcado com *)
git branch nova-funcao # cria um branch novo
git checkout nova-funcao # muda para esse branch
git checkout -b nova-funcao # cria E muda para o branch em um só passo
# ... você faz commits no branch ...
git checkout main # volta para a main
git merge nova-funcao # funde as mudanças do branch na main
No Git moderno você também pode usar
git switch(mudar de branch) egit switch -c(criar e mudar), uma alternativa mais clara aocheckout.
.gitignore: o que NÃO é versionado
Nem tudo deve entrar no histórico. As dependências instaladas
(node_modules), os arquivos de configuração local e os segredos não são
versionados: ocupam muito espaço, são regenerados ou são privados. Para excluí-los você cria um
arquivo chamado .gitignore:
# .gitignore
node_modules/
.env
dist/
*.log
O node_modules é reconstruído com npm install a partir do package.json,
então versioná-lo não acrescenta nada e só gera ruído.
Remotos e GitHub
Um remoto é uma cópia do repositório hospedada em outro lugar (por exemplo, no GitHub). Ele te permite fazer backup e colaborar.
git remote add origin https://github.com/usuario/repo.git # vincula o remoto
git push -u origin main # envia seus commits para o remoto (primeira vez com -u)
git push # envia os commits seguintes
git pull # traz e funde as mudanças do remoto
git clone https://github.com/usuario/repo.git # copia um repo existente
O nome origin é a convenção para o remoto principal. O push envia seu
trabalho para o GitHub; o pull traz o que outras pessoas tiverem enviado. É assim que uma equipe
mantém o código sincronizado.