Resumo: Git

Guia essencial de Git em português para iniciantes. Conceitos fundamentais com comandos práticos para controle de versão.

Git

Configuração Inicial

# Inicializar um novo repositório Git
$ git init

# Configurar nome de usuário (global)
$ git config --global user.name "Seu Nome"

# Configurar email do usuário (global)
$ git config --global user.email "seu.email@exemplo.com"

# Visualizar configurações definidas
$ git config --global user.name
$ git config --global user.email

# Configurar para assinatura de commits com GPG
$ git config --global user.signingkey ID_CHAVE_AQUI

# Ver rapidamente os comandos disponíveis
$ git help

# Ver todos os comandos disponíveis
$ git help -a

# Help detalhado para um comando específico
$ git help add
$ git help commit
$ git help pull

Ignorar Arquivos e Status

# Listar e ignorar arquivos usando .gitignore
# Criar arquivo na raiz do projeto:
$ echo "node_modules/" >> .gitignore
$ echo "*.log" >> .gitignore
$ echo "chaves_privadas/" >> .gitignore
$ echo ".env" >> .gitignore

# Ver status do repositório
# (mostra branch, alterações e arquivos não rastreados)
$ git status

# Status em formato resumido
$ git status --short

# Ver quais arquivos estão sendo rastreados
$ git ls-files

Adicionar e Fazer Commit

# Adicionar um arquivo específico
$ git add README.md

# Adicionar todos os arquivos em um sub-diretório
$ git add ./src/

# Adicionar múltiplos arquivos com padrão
$ git add ./*.java
$ git add ./src/**/*.js

# Adicionar todas as alterações do projeto
$ git add -A
$ git add .

# Adicionar apenas arquivos já rastreados
$ git add -u

# Fazer commit com mensagem
$ git commit -m "Implementar função de login"

# Adicionar e fazer commit de uma vez
$ git commit -a -m "Modificar arquivo existente e fazer commit"

# Emendar o último commit (sem criar um novo)
$ git commit --amend -m "Mensagem corrigida"

# Fazer commit assinado com GPG
$ git commit -S -m "Adicionar validação de entrada"

# Ver log de commits
$ git log

# Log em uma linha (mais compacto)
$ git log --oneline

# Log com gráfico visual de branches
$ git log --graph

# Log com limite de commits
$ git log -5

# Ver commits de um arquivo específico
$ git log -- arquivo.txt

Branches

# Listar todas as branches locais
$ git branch

# Listar branches remotas
$ git branch -r

# Listar todas as branches (locais e remotas)
$ git branch -a

# Criar uma nova branch
$ git branch develop

# Criar e fazer checkout de uma nova branch
$ git checkout -b feature/login

# Renomear uma branch
$ git branch -m develop new-develop
$ git branch -m old-name new-name

# Deletar uma branch
$ git branch -d develop

# Forçar deletar uma branch
$ git branch -D develop

# Editar descrição de uma branch
$ git branch develop --edit-description

# Ver ramo atual
$ git rev-parse --abbrev-ref HEAD

Checkout e Alternância

# Ver status atual (em qual branch você está)
$ git status

# Mudar para uma branch existente
$ git checkout develop
$ git checkout main

# Criar e mudar para uma nova branch
$ git checkout -b feature/novo-componente

# Mudar para um commit específico (detached HEAD)
$ git checkout abc123def

# Descartar alterações em um arquivo
$ git checkout -- arquivo.js

# Restaurar um arquivo de um commit específico
$ git checkout HEAD~2 -- arquivo.js

Tags (Marcadores de Versão)

# Listar todas as tags
$ git tag

# Listar tags com padrão específico
$ git tag -l "v1.*"

# Criar uma tag anotada (recomendado)
$ git tag -a v1.0.0 -m 'Release versão 1.0.0'

# Criar uma tag leve (lightweight - mais simples)
$ git tag v1.0.0-beta

# Ver informações de uma tag
$ git show v1.0.0

# Criar tag em um commit específico
$ git tag -a v0.9.0 -m "Beta" abc123def

# Deletar uma tag local
$ git tag -d v1.0.0

# Enviar uma tag específica para repositório remoto
$ git push origin v1.0.0

# Enviar todas as tags para remoto
$ git push origin --tags

Clonar e Repositórios Remotos

# Clonar um repositório (cria cópia local completa)
$ git clone https://github.com/usuario/projeto.git

# Clonar apenas o último commit (clone superficial - mais rápido)
$ git clone --depth 1 https://github.com/usuario/projeto.git

# Clonar apenas uma branch específica
$ git clone -b main --single-branch https://github.com/usuario/projeto.git

# Listar repositórios remotos configurados
$ git remote

# Ver URLs dos repositórios remotos
$ git remote -v

# Adicionar um novo repositório remoto
$ git remote add origin https://github.com/usuario/projeto.git

# Renomear um repositório remoto
$ git remote rename origin upstream

# Remover um repositório remoto
$ git remote remove origin

# Ver informações detalhadas de um remoto
$ git remote show origin

Comparar Alterações

# Ver diferenças entre arquivo modificado e staged
$ git diff

# Ver diferenças entre staged e último commit
$ git diff --cached
$ git diff --staged

# Ver diferenças entre diretório atual e último commit
$ git diff HEAD

# Ver diferenças entre dois commits
$ git diff abc123def def456ghi

# Ver diferenças de um arquivo específico
$ git diff -- arquivo.js

# Ver diferenças com números de linha
$ git diff -U0

# Ver apenas nomes de arquivos modificados
$ git diff --name-only

# Pesquisar por padrão em arquivos (grep)
$ git grep 'nomeDaVariavel' -- '*.js'

# Pesquisar por múltiplos padrões
$ git grep -e 'nomeDoArray' --and \( -e add -e remove \)

Merge e Rebase

# Mesclar uma branch na branch atual
$ git merge develop

# Mesclar sem criar commit de merge (fast-forward)
$ git merge --ff-only develop

# Forçar criar um commit de merge mesmo se possível fast-forward
$ git merge --no-ff develop

# Ver branches já mescladas
$ git branch --merged

# Ver branches não mescladas
$ git branch --no-merged

# Fazer rebase da branch atual em cima de outra
$ git rebase main

# Rebase interativo (reorganizar/editar commits)
$ git rebase -i HEAD~3

# Continuar rebase após resolver conflitos
$ git rebase --continue

# Abortar um rebase
$ git rebase --abort

Push, Pull e Desfazer

# Enviar commits para repositório remoto
$ git push origin main

# Enviar e associar branch local com branch remota
$ git push -u origin feature/login

# Enviar todas as branches
$ git push --all

# Buscar alterações do remoto (sem mesclar)
$ git fetch origin

# Buscar alterações e mesclar (equivalente a fetch + merge)
$ git pull origin main

# Pull com rebase (em vez de merge)
$ git pull origin main --rebase

# Desfazer alterações não staged
$ git restore arquivo.js
$ git checkout -- arquivo.js

# Resetar index (desfazer git add)
$ git reset filename.js

# Resetar para o último commit (mantém alterações no diretório)
$ git reset --soft HEAD~1

# Resetar para o último commit (descarta alterações)
$ git reset --hard HEAD~1

# Resetar para um commit específico
$ git reset --hard abc123def

# Reverter um commit específico (cria novo commit desfazendo-o)
$ git revert abc123def

# Guardar alterações temporariamente
$ git stash

# Listar alterações guardadas
$ git stash list

# Aplicar alterações guardadas
$ git stash pop

# Aplicar sem remover do stash
$ git stash apply

# Deletar alterações guardadas
$ git stash drop stash@{0}

# Ver o reflog (histórico de movimentações HEAD)
$ git reflog

# Voltar para um estado anterior usando reflog
$ git reset --hard HEAD@{2}