Folha de consulta de comandos Git

Pratique comandos Git com laboratórios práticos

Use esta folha de consulta de comandos Git como referência rápida para tarefas diárias de controle de versão. Ela cobre configuração de repositório, staging, commits, branches, merges, rebases, remotes, stashes, histórico, comandos de desfazer e colaboração no 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