Git Cheatsheet

Aprenda Git com Laboratórios Práticos

Aprenda controle de versão Git através de laboratórios práticos e cenários do mundo real. O LabEx oferece cursos abrangentes de Git cobrindo comandos essenciais, estratégias de ramificação, fluxos de trabalho de colaboração e técnicas avançadas. Aprenda a gerenciar repositórios de código, resolver conflitos e trabalhar efetivamente com equipes usando Git e GitHub.

Configuração e Inicialização de Repositório

Inicializar Repositório: git init

Cria um novo repositório Git no diretório atual.

# Inicializar novo repositório
git init
# Inicializar em novo diretório
git init project-name
# Inicializar repositório bare (sem diretório de trabalho)
git init --bare
# Usar diretório de template personalizado
git init --template=path

Clonar Repositório: git clone

Cria uma cópia local de um repositório remoto.

# Clonar via HTTPS
git clone https://github.com/user/repo.git
# Clonar via SSH
git clone git@github.com:user/repo.git
# Clonar com nome personalizado
git clone repo.git local-name
# Clonagem superficial (apenas o commit mais recente)
git clone --depth 1 repo.git

Configuração Global: git config

Configura informações do usuário e preferências globalmente.

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global init.defaultBranch main
# Visualizar todas as configurações
git config --list

Configuração Local: git config --local

Define a configuração específica do repositório.

# Definir apenas para o repositório atual
git config user.name "Project Name"
# E-mail específico do projeto
git config user.email "project@example.com"

Gerenciamento de Remotos: git remote

Gerencia conexões com repositórios remotos.

# Adicionar remoto
git remote add origin https://github.com/user/repo.git
# Listar todos os remotos com URLs
git remote -v
# Mostrar informações detalhadas do remoto
git remote show origin
# Renomear remoto
git remote rename origin upstream
# Remover remoto
git remote remove upstream

Armazenamento de Credenciais: git config credential

Armazena credenciais de autenticação para evitar login repetido.

# Cache por 15 minutos
git config --global credential.helper cache
# Armazenar permanentemente
git config --global credential.helper store
# Cache por 1 hora
git config --global credential.helper 'cache --timeout=3600'

Informações e Status do Repositório

Verificar Status: git status

Exibe o estado atual do diretório de trabalho e da área de staging.

# Informações de status completas
git status
# Formato de status curto
git status -s
# Formato legível por máquina
git status --porcelain
# Mostrar também arquivos ignorados
git status --ignored

Visualizar Diferenças: git diff

Mostra as alterações entre diferentes estados do seu repositório.

# Alterações no diretório de trabalho vs staging
git diff
# Alterações no staging vs último commit
git diff --staged
# Todas as alterações não confirmadas
git diff HEAD
# Alterações em um arquivo específico
git diff file.txt

Visualizar Histórico: git log

Exibe o histórico de commits e a linha do tempo do repositório.

# Histórico de commits completo
git log
# Formato condensado de uma linha
git log --oneline
# Mostrar os últimos 5 commits
git log -5
# Gráfico visual de branches
git log --graph --all

Staging e Confirmação de Alterações

Preparar Arquivos: git add

Adiciona alterações à área de staging para o próximo commit.

# Preparar arquivo específico
git add file.txt
# Preparar todas as alterações no diretório atual
git add .
# Preparar todas as alterações (incluindo exclusões)
git add -A
# Preparar todos os arquivos JavaScript
git add *.js
# Preparação interativa (modo patch)
git add -p

Confirmar Alterações: git commit

Salva as alterações preparadas no repositório com uma mensagem descritiva.

# Commit com mensagem
git commit -m "Add user authentication"
# Preparar e confirmar arquivos modificados
git commit -a -m "Update docs"
# Modificar o último commit
git commit --amend
# Modificar sem alterar a mensagem
git commit --no-edit --amend
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

O que git commit -m "message" faz?
Cria um novo commit com a mensagem especificada
Prepara todas as alterações no diretório de trabalho
Envia as alterações para o repositório remoto
Cria uma nova branch

Despreparar Arquivos: git reset

Remove arquivos da área de staging ou desfaz commits.

# Despreparar arquivo específico
git reset file.txt
# Despreparar todos os arquivos
git reset
# Desfazer último commit, mantendo alterações preparadas
git reset --soft HEAD~1
# Desfazer último commit, descartando alterações
git reset --hard HEAD~1

Descartar Alterações: git checkout / git restore

Reverte alterações no diretório de trabalho para o estado do último commit.

# Descartar alterações no arquivo (sintaxe antiga)
git checkout -- file.txt
# Descartar alterações no arquivo (nova sintaxe)
git restore file.txt
# Despreparar arquivo (nova sintaxe)
git restore --staged file.txt
# Descartar todas as alterações não confirmadas
git checkout .

Operações de Branch

Listar Branches: git branch

Visualiza e gerencia branches do repositório.

# Listar branches locais
git branch
# Listar todos os branches (locais e remotos)
git branch -a
# Listar apenas branches remotos
git branch -r
# Mostrar último commit em cada branch
git branch -v

Criar e Mudar: git checkout / git switch

Cria novas branches e alterna entre elas.

# Criar e mudar para nova branch
git checkout -b feature-branch
# Criar e mudar (nova sintaxe)
git switch -c feature-branch
# Mudar para branch existente
git checkout main
# Mudar para branch existente (nova sintaxe)
git switch main
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

O que git checkout -b feature-branch faz?
Deleta a branch feature-branch
Cria uma nova branch chamada feature-branch e muda para ela
Mescla feature-branch na branch atual
Mostra o histórico de commits da feature-branch

Mesclar Branches: git merge

Combina alterações de diferentes branches.

# Mesclar feature-branch na branch atual
git merge feature-branch
# Mesclagem forçada
git merge --no-ff feature-branch
# Agrupar commits antes de mesclar
git merge --squash feature-branch

Deletar Branches: git branch -d

Remove branches que não são mais necessárias.

# Deletar branch mesclada
git branch -d feature-branch
# Deletar branch não mesclada forçadamente
git branch -D feature-branch
# Deletar branch remota
git push origin --delete feature-branch

Operações de Repositório Remoto

Buscar Atualizações: git fetch

Baixa alterações do repositório remoto sem mesclar.

# Buscar do remoto padrão
git fetch
# Buscar de um remoto específico
git fetch origin
# Buscar de todos os remotos
git fetch --all
# Buscar branch específica
git fetch origin main

Puxar Alterações: git pull

Baixa e mescla alterações do repositório remoto.

# Puxar da branch de rastreamento
git pull
# Puxar de branch remota específica
git pull origin main
# Puxar com rebase em vez de merge
git pull --rebase
# Apenas fast-forward, sem commits de merge
git pull --ff-only
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

Qual é a diferença entre git fetch e git pull?
Não há diferença; eles fazem a mesma coisa
git fetch envia alterações, git pull baixa alterações
git fetch baixa alterações sem mesclar, git pull baixa e mescla alterações
git fetch funciona com repositórios locais, git pull funciona com repositórios remotos

Enviar Alterações: git push

Carrega commits locais para o repositório remoto.

# Enviar para a branch de rastreamento
git push
# Enviar para branch remota específica
git push origin main
# Enviar e configurar rastreamento upstream
git push -u origin feature
# Envio forçado seguro
git push --force-with-lease
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

O que git push -u origin feature faz?
Deleta a branch feature do remoto
Puxa alterações da branch feature
Mescla a branch feature em main
Envia a branch feature para origin e configura o rastreamento

Rastrear Branches Remotas: git branch --track

Configura o rastreamento entre branches locais e remotas.

# Configurar rastreamento
git branch --set-upstream-to=origin/main main
# Rastrear branch remota
git checkout -b local-branch origin/remote-branch

Stashing e Armazenamento Temporário

Stash Alterações: git stash

Salva temporariamente alterações não confirmadas para uso posterior.

# Stash alterações atuais
git stash
# Stash com mensagem
git stash save "Work in progress on feature X"
# Incluir arquivos não rastreados
git stash -u
# Stash apenas alterações não preparadas
git stash --keep-index

Listar Stashes: git stash list

Visualiza todos os stashes salvos.

# Mostrar todos os stashes
git stash list
# Mostrar alterações no stash mais recente
git stash show
# Mostrar alterações em um stash específico
git stash show stash@{1}

Aplicar Stashes: git stash apply

Restaura alterações previamente salvas.

# Aplicar stash mais recente
git stash apply
# Aplicar stash específico
git stash apply stash@{1}
# Aplicar e remover o stash mais recente
git stash pop
# Deletar stash mais recente
git stash drop
# Criar branch a partir do stash
git stash branch new-branch stash@{1}
# Deletar todos os stashes
git stash clear
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

Qual é a diferença entre git stash apply e git stash pop?
git stash apply remove o stash, git stash pop o mantém
git stash apply mantém o stash, git stash pop o remove após a aplicação
git stash apply funciona com repositórios remotos, git stash pop funciona localmente
Não há diferença; eles fazem a mesma coisa

Análise de Histórico e Log

Visualizar Histórico de Commits: git log

Explore o histórico do repositório com várias opções de formatação.

# Histórico visual de branches
git log --oneline --graph --all
# Commits de um autor específico
git log --author="John Doe"
# Commits recentes
git log --since="2 weeks ago"
# Buscar mensagens de commit
git log --grep="bug fix"

Culpar e Anotar: git blame

Vê quem modificou cada linha de um arquivo pela última vez.

# Mostrar autoria linha por linha
git blame file.txt
# Blame em linhas específicas
git blame -L 10,20 file.txt
# Alternativa para blame
git annotate file.txt

Pesquisar Repositório: git grep

Pesquisa padrões de texto em todo o histórico do repositório.

# Pesquisar texto em arquivos rastreados
git grep "function"
# Pesquisar com números de linha
git grep -n "TODO"
# Pesquisar em arquivos preparados
git grep --cached "bug"

Mostrar Detalhes do Commit: git show

Exibe informações detalhadas sobre commits específicos.

# Mostrar detalhes do último commit
git show
# Mostrar commit anterior
git show HEAD~1
# Mostrar commit específico pelo hash
git show abc123
# Mostrar commit com estatísticas de arquivo
git show --stat

Desfazendo Alterações e Editando Histórico

Reverter Commits: git revert

Cria novos commits que desfazem alterações anteriores de forma segura.

# Reverter o último commit
git revert HEAD
# Reverter commit específico
git revert abc123
# Reverter intervalo de commits
git revert HEAD~3..HEAD
# Reverter sem commit automático
git revert --no-commit abc123

Resetar Histórico: git reset

Move o ponteiro da branch e opcionalmente modifica o diretório de trabalho.

# Desfazer commit, manter alterações preparadas
git reset --soft HEAD~1
# Desfazer commit e staging
git reset --mixed HEAD~1
# Desfazer commit, staging e diretório de trabalho
git reset --hard HEAD~1

Rebase Interativo: git rebase -i

Edita, reordena ou agrupa commits interativamente.

# Rebase interativo dos últimos 3 commits
git rebase -i HEAD~3
# Rebase da branch atual sobre main
git rebase -i main
# Continuar após resolver conflitos
git rebase --continue
# Cancelar operação de rebase
git rebase --abort

Cherry-pick: git cherry-pick

Aplica commits específicos de outras branches.

# Aplicar commit específico na branch atual
git cherry-pick abc123
# Aplicar intervalo de commits
git cherry-pick abc123..def456
# Cherry-pick sem confirmar
git cherry-pick -n abc123

Resolução de Conflitos

Conflitos de Merge: Processo de Resolução

Passos para resolver conflitos durante operações de merge.

# Verificar arquivos em conflito
git status
# Marcar conflito como resolvido
git add resolved-file.txt
# Completar o merge
git commit
# Cancelar merge e retornar ao estado anterior
git merge --abort

Ferramentas de Merge: git mergetool

Inicia ferramentas externas para ajudar a resolver conflitos visualmente.

# Iniciar ferramenta de merge padrão
git mergetool
# Definir ferramenta de merge padrão
git config --global merge.tool vimdiff
# Usar ferramenta específica para este merge
git mergetool --tool=meld

Marcadores de Conflito: Entendendo o Formato

Interpreta os marcadores de conflito do Git nos arquivos.

<<<<<<< HEAD
Conteúdo da branch atual
=======
Conteúdo da branch de entrada
>>>>>>> feature-branch

Após editar o arquivo para resolver:

git add conflicted-file.txt
git commit

Ferramentas de Diff: git difftool

Usa ferramentas externas de diff para melhor visualização de conflitos.

# Iniciar ferramenta de diff para alterações
git difftool
# Definir ferramenta de diff padrão
git config --global diff.tool vimdiff

Marcação e Lançamentos (Tagging)

Criar Tags: git tag

Marca commits específicos com rótulos de versão.

# Criar tag leve (lightweight)
git tag v1.0
# Criar tag anotada
git tag -a v1.0 -m "Version 1.0 release"
# Marcar commit específico
git tag -a v1.0 abc123
# Criar tag assinada
git tag -s v1.0

Listar e Mostrar Tags: git tag -l

Visualiza tags existentes e suas informações.

# Listar todas as tags
git tag
# Listar tags que correspondem ao padrão
git tag -l "v1.*"
# Mostrar detalhes da tag
git show v1.0

Enviar Tags: git push --tags

Compartilha tags com repositórios remotos.

# Enviar tag específica
git push origin v1.0
# Enviar todas as tags
git push --tags
# Enviar todas as tags para um remoto específico
git push origin --tags

Deletar Tags: git tag -d

Remove tags de repositórios locais e remotos.

# Deletar tag local
git tag -d v1.0
# Deletar tag remota
git push origin --delete tag v1.0
# Sintaxe alternativa para deletar
git push origin :refs/tags/v1.0

Configuração e Aliases do Git

Visualizar Configuração: git config --list

Exibe as configurações atuais do Git.

# Mostrar todas as configurações
git config --list
# Mostrar apenas configurações globais
git config --global --list
# Mostrar configurações específicas do repositório
git config --local --list
# Mostrar uma configuração específica
git config user.name

Criar Aliases: git config alias

Cria atalhos para comandos frequentemente usados.

# git st = git status
git config --global alias.st status
# git co = git checkout
git config --global alias.co checkout
# git br = git branch
git config --global alias.br branch
# git ci = git commit
git config --global alias.ci commit

Aliases Avançados: Comandos Complexos

Cria aliases para combinações complexas de comandos.

git config --global alias.lg "log --oneline --graph --all"
git config --global alias.unstage "reset HEAD --"
git config --global alias.last "log -1 HEAD"
git config --global alias.visual "!gitk"

Configuração do Editor: git config core.editor

Define o editor de texto preferido para mensagens de commit e conflitos.

# VS Code
git config --global core.editor "code --wait"
# Vim
git config --global core.editor "vim"
# Nano
git config --global core.editor "nano"

Desempenho e Otimização

Manutenção do Repositório: git gc

Otimiza o desempenho e o armazenamento do repositório.

# Coleta de lixo padrão
git gc
# Otimização mais completa
git gc --aggressive
# Executar apenas se necessário
git gc --auto
# Verificar integridade do repositório
git fsck

Manipulação de Arquivos Grandes: git lfs

Gerencia eficientemente arquivos binários grandes com Git LFS.

# Instalar LFS no repositório
git lfs install
# Rastrear arquivos PDF com LFS
git lfs track "*.pdf"
# Listar arquivos rastreados por LFS
git lfs ls-files
# Migrar arquivos existentes
git lfs migrate import --include="*.zip"

Clonagens Rasas (Shallow Clones): Reduzindo o Tamanho do Repositório

Clona repositórios com histórico limitado para operações mais rápidas.

# Apenas o commit mais recente
git clone --depth 1 https://github.com/user/repo.git
# Últimos 10 commits
git clone --depth 10 repo.git
# Converter clone raso em completo
git fetch --unshallow

Sparse Checkout: Trabalhando com Subdiretórios

Faz checkout apenas de partes específicas de repositórios grandes.

git config core.sparseCheckout true
echo "src/*" > .git/info/sparse-checkout
# Aplicar sparse checkout
git read-tree -m -u HEAD

Instalação e Configuração do Git

Gerenciadores de Pacotes: apt, yum, brew

Instala o Git usando gerenciadores de pacotes do sistema.

# Ubuntu/Debian
sudo apt install git
# CentOS/RHEL
sudo yum install git
# macOS com Homebrew
brew install git
# Windows com winget
winget install Git.Git

Download e Instalação: Instaladores Oficiais

Use instaladores oficiais do Git para sua plataforma.

# Baixar de https://git-scm.com/downloads
# Verificar instalação
git --version
# Mostrar caminho do executável do Git
which git

Configuração Inicial: Identidade do Usuário

Configura sua identidade para commits.

git config --global user.name "Your Full Name"
git config --global user.email "your.email@example.com"
git config --global init.defaultBranch main
# Definir comportamento de merge
git config --global pull.rebase false

Fluxos de Trabalho e Melhores Práticas do Git

Fluxo de Branch de Recurso (Feature Branch Workflow)

Fluxo de trabalho padrão para desenvolvimento de recursos com branches isoladas.

# Começar da branch main
git checkout main
# Obter últimas alterações
git pull origin main
# Criar branch de recurso
git checkout -b feature/user-auth
# ... fazer alterações e commits ...
# Enviar branch de recurso
git push -u origin feature/user-auth
# ... criar pull request ...

Git Flow: Modelo Estruturado de Branching

Abordagem sistemática com branches dedicadas para diferentes propósitos.

# Inicializar Git Flow
git flow init
# Iniciar recurso
git flow feature start new-feature
# Finalizar recurso
git flow feature finish new-feature
# Iniciar branch de lançamento
git flow release start 1.0.0

Convenções de Mensagens de Commit

Seguir o formato de commit convencional para um histórico de projeto claro.

# Formato: <tipo>(<escopo>): <assunto>
git commit -m "feat(auth): add user login functionality"
git commit -m "fix(api): resolve null pointer exception"
git commit -m "docs(readme): update installation instructions"
git commit -m "refactor(utils): simplify date formatting"

Commits Atômicos: Melhores Práticas

Criar commits focados, de propósito único, para um histórico melhor.

# Preparar alterações interativamente
git add -p
# Alteração específica
git commit -m "Add validation to email field"
# Evitar: git commit -m "Fix stuff" # Muito vago
# Bom:  git commit -m "Fix email validation regex pattern"

Solução de Problemas e Recuperação

Reflog: Ferramenta de Recuperação

Usar o log de referências do Git para recuperar commits perdidos.

# Mostrar log de referências
git reflog
# Mostrar movimentos do HEAD
git reflog show HEAD
# Recuperar commit perdido
git checkout abc123
# Criar branch a partir de commit perdido
git branch recovery-branch abc123

Repositório Corrompido: Reparo

Corrigir problemas de integridade e corrupção do repositório.

# Verificar integridade do repositório
git fsck --full
# Limpeza agressiva
git gc --aggressive --prune=now
# Reconstruir índice se corrompido
rm .git/index; git reset

Problemas de Autenticação

Resolver problemas comuns de autenticação e permissão.

# Usar token
git remote set-url origin https://token@github.com/user/repo.git
# Adicionar chave SSH ao agente
ssh-add ~/.ssh/id_rsa
# Gerenciador de credenciais do Windows
git config --global credential.helper manager-core

Problemas de Desempenho: Depuração

Identificar e resolver problemas de desempenho do repositório.

# Mostrar tamanho do repositório
git count-objects -vH
# Contar total de commits
git log --oneline | wc -l
# Contar branches
git for-each-ref --format='%(refname:short)' | wc -l