Folha de dicas dos comandos do Git: os comandos que você realmente usa, com exemplos

  1. Início
  2. Blog
  3. Desenvolvimento de software

Desenvolvimento de Software

Folha de dicas dos comandos do Git: Os comandos que você realmente usa, com exemplos

Uma referência prática do Git agrupada pelo que você está tentando fazer, desde o primeiro commit até desfazer um erro. Mantenha-o aberto enquanto trabalha e use o guia de desfazer antes de iniciar qualquer coisa arriscada.

8 min de leitura
Folha de referências dos comandos Git: os comandos que você realmente usa, com exemplos

Principais pontos

  • Uma mudança passa por três áreas: diretório de trabalho, área de preparação e repositório.
  • git status é o comando mais seguro que você possui, então execute-o constantemente.
  • Use git revert para desfazer commits compartilhados e mantenha git reset --hard para trabalhos locais dos quais você tem certeza.
  • git reflog geralmente pode resgatar commits que você pensou que estavam perdidos.

Ninguém se lembra de todos os comandos do Git e você não precisa disso. Esta folha de dicas de comandos do Git concentra-se no pequeno conjunto que cobre quase todo o trabalho diário, agrupado pelo trabalho que você está tentando realizar.

Testamos os comandos locais em um repositório de demonstração descartável usando Git para Windows, e a saída mostrada vem dessa execução, com avisos de final de linha removidos. Seus hashes de commit serão diferentes. Os comandos remotos precisam de um servidor, por isso não os executamos. Novo no controle de versão? Comece com nosso tutorial do Git para iniciantes.

Como o Git pensa: três áreas

A maior parte da confusão desaparece quando você sabe onde reside uma mudança:

Área O que isso contém Mudou-se para lá por
Diretório de trabalho Seus arquivos conforme você os edita Edição
Área de preparação (índice) Mudanças selecionadas para o próximo commit adicionar
Repositório local Seu histórico de commits salvo git commit
Repositório remoto A cópia compartilhada, como no GitHub dê um empurrão

Configurar e iniciar um projeto

Comando O que isso faz
git config --global user.name "Asha" Define seu nome em commits
git config --global user.email "a@b.com" Define seu e-mail em commits
git config --global init.defaultBranch principal Nomeia novos ramos padrão main
git iniciar Cria um repositório na pasta atual
clone do git <url> Baixa um repositório existente
git configuração --lista Mostra suas configurações atuais

Salve seu trabalho

Comando O que isso faz
status do git Mostra o que mudou
git adicionar arquivo.txt Prepara um arquivo
adicione. Prepara todas as alterações nesta pasta
git adicionar -p Prepara partes selecionadas de um arquivo
git diferença Mostra alterações não preparadas
git diff --staged Mostra o que será comprometido
git commit -m "Mensagem" Salva alterações preparadas como um commit
git commit -am "Mensagem" Prepara arquivos rastreados e os confirma

Veja como a visualização resumida do status muda à medida que um novo arquivo avança:

$ echo "hello" > app.txt
$ git status --short
?? app.txt

$ git add app.txt
$ git status --short
A  app.txt

$ git commit -m "Add app file"

?? significa não rastreado e A significa adicionado à preparação. No formato de duas colunas, a coluna da esquerda é a área de preparação e a coluna da direita é o seu diretório de trabalho. Observe que git commit -am ignora arquivos novos, então você deve adicioná-los explicitamente primeiro.

Filiais

Comando O que isso faz
ramo git Lista filiais locais
git ramo -a Inclui filiais remotas
recurso/login do git switch Muda para uma filial
git switch -c recurso/login Cria um branch e move para ele
recurso/login de mesclagem git Mescla esse branch no atual
git rebase principal Reproduz seus commits além de main
git branch -d recurso/login Exclui uma ramificação mesclada
git branch -D recurso/login Forçar a exclusão de um branch não mesclado

Aqui está um pequeno ramo de recursos do início ao fim:

$ git switch -c feature/login
$ echo "login" >> app.txt
$ git commit -am "Add login"
$ git switch main
$ git merge --no-edit feature/login
$ git log --oneline --graph
* d0450b6 Add login
* 676b684 Add app file

$ git branch -d feature/login
Deleted branch feature/login (was d0450b6).

A história é uma linha reta porque main não foi movido, então o Git fez uma fusão rápida. Você ainda verá git checkout em guias mais antigos. Funciona, mas os comandos switch e restore mais recentes dividem seus muitos trabalhos em outros mais claros. Para escolher entre mesclagem e rebase, leia Git merge vs rebase.

Trabalhando com controles remotos

Comando O que isso faz
git remoto -v Lista controles remotos e seus URLs
git remoto adicionar origem <url> Conecta um controle remoto
buscar Baixa alterações sem mesclar
puxa Busca e depois integra ao seu branch
dê um empurrão Carrega seus commits
git push -u origem recurso/login Envia um novo branch e o rastreia
git push origin --delete recurso/login Exclui uma ramificação remota
git push --force-com-lease Forçar empurra, mas somente se ninguém mais tiver empurrado

fetch é sempre seguro, porque nunca altera seus arquivos. Se você precisar sobrescrever um branch após um rebase, prefira --force-with-lease ao simples --force, pois ele se recusa a eliminar os novos commits de um colega.

Stash: deixe o trabalho de lado

Stash é útil quando você precisa trocar de tarefa, mas não está pronto para confirmar:

$ echo "wip" >> app.txt
$ git stash
$ git status --short
                       # clean, the change is put away
$ git stash pop
$ git status --short
 M app.txt
Comando O que isso faz
esconderijo Salva alterações e limpa seu diretório de trabalho
git stash -u Inclui arquivos não rastreados
lista de estoque do git Mostra stashes salvos
git stash pop Restaura o stash mais recente e o remove
git stash aplicar Restaura, mas mantém salvo

Ver histórico

Comando O que isso faz
git log --oneline Mostra uma linha por commit
git log --oneline --graph --all Desenha todos os ramos
git log -p arquivo.txt Mostra as alterações de um arquivo ao longo do tempo
git mostrar <hash> Mostra um commit em detalhes
git culpa file.txt Mostra quem alterou cada linha pela última vez
git reflog Mostra em todos os lugares que HEAD esteve
git bisect Pesquisas binárias pelo commit que adicionou um bug

Desfazer erros: “Eu quero…”

Esta é a parte que a maioria das pessoas procura. Encontre sua situação:

Situação Comando
Descartar edições não preparadas em um arquivo git restaurar arquivo.txt
Remova o preparo de um arquivo, mas mantenha as edições git restaurar --staged arquivo.txt
Corrija a mensagem ou os arquivos do último commit git commit --amend
Desfaça o último commit, mantendo as alterações preparadas git reset --soft HEAD~1
Desfaça o último commit, mantendo as alterações sem etapas git redefinir CABEÇA~1
Desfaça um commit enviado com segurança git reverter <hash>
Jogue fora todas as alterações locais git reset --hard
Remover arquivos não rastreados git clean -fd (visualização com -n)
Recuperar um commit “perdido” git reflog, então git branch rescue <hash>

Dica: Antes de qualquer coisa arriscada, execute git branch backup. Não custa nada e oferece um rótulo para o qual retornar. git reset --hard e git clean podem destruir permanentemente o trabalho não comprometido, que mesmo reflog não pode recuperar.

Redefinir vs reverter vs restaurar

Esses três nomes causam muita confusão, mas fazem coisas bem diferentes:

Comando Atua em Histórico de mudanças? Seguro em filiais compartilhadas?
git restaurar Arquivos Não Sim, mas descarta edições locais
git reverter Um commit, adicionando seu oposto Adiciona a isso Sim
redefinir O ponteiro de ramificação Reescreve Não

Em nossa demonstração, cometemos uma linha incorreta e a revertemos. O arquivo voltou ao seu conteúdo anterior, enquanto o erro permaneceu visível no log como histórico:

$ echo "oops" >> app.txt
$ git commit -am "Bad change"
$ git revert --no-edit HEAD
$ cat app.txt
hello
login

Então git reset --soft HEAD~1 removeu o último commit, mas manteve suas alterações preparadas, que git status --short mostrou como M app.txt.

Etiquetas

Comando O que isso faz
etiqueta git Lista tags
etiqueta git v1.0 Cria uma tag leve
git tag -a v1.0 -m "Liberar" Cria uma tag anotada, ideal para lançamentos
git push origem v1.0 Envia uma tag (as tags não são enviadas por push por padrão)

As tags geralmente acionam pipelines de lançamento, como explica nosso guia de CI/CD de ações do GitHub.

Um fluxo de trabalho diário simples

git switch main
git pull
git switch -c feature/search
# edit files
git status
git add -p
git commit -m "Add search by product name"
git push -u origin feature/search
# open a pull request, get a review, then merge

Escreva mensagens de commit que expliquem a mudança no imperativo, como “Corrigir redirecionamento de login”. Você vai se agradecer ao ler o registro daqui a seis meses.

Erros comuns

  • Comprometendo segredos. Remover um arquivo em um commit posterior não o remove do histórico. Gire o segredo imediatamente e use .gitignore.
  • Reescrevendo o histórico compartilhado. Não redefina ou rebase commits que outras pessoas já extraíram.
  • Usando git add . cegamente. Verifique git status primeiro, para que os arquivos de compilação e logs fiquem de fora.
  • Usando --force simples. Prefira --force-with-lease.
  • Fazer commits enormes. Os pequenos são mais fáceis de revisar, reverter e dividir.

Considerações finais

Aprenda as três áreas e uma dúzia de comandos e o Git deixará de ser assustador. Mantenha a tabela de desfazer à mão e lembre-se de que git status e git reflog são sua rede de segurança. Para aumentar a confiança, crie um repositório descartável e quebre-o e repare-o deliberadamente, já que esse é o lugar mais barato para cometer erros.

Perguntas frequentes

Quais são os comandos Git mais usados?

O conjunto diário é git status, add, commit, push, pull, switch, branch, merge e log. Esses poucos comandos cobrem a maior parte de um dia normal de trabalho.

Como desfaço meu último commit no Git?

Se for local, use git reset –soft HEAD~1 para manter as alterações preparadas. Se você já fez o push, use git revert para que o histórico permaneça intacto para outros.

Qual é a diferença entre git fetch e git pull?

git fetch apenas baixa novos dados e deixa seus arquivos em paz. git pull busca e depois mescla ou rebase essas alterações em seu branch atual.

Qual é a diferença entre git reset e git revert?

git reset move o ponteiro do branch e pode reescrever o histórico. git revert adiciona um novo commit que desfaz um anterior, o que o torna seguro em ramificações compartilhadas.

Posso recuperar um branch excluído no Git?

Normalmente, sim. Encontre seu último commit com git reflog e, em seguida, recrie o branch com git branch name seguido do hash, desde que o Git ainda não o tenha limpo.

Continue aprendendo

Trabalhe com Stack Quora

Precisa de ajuda com testes, WordPress ou SEO?

Ajudamos as equipes a fornecer software melhor e a expandir seus sites. Conte-nos no que você está trabalhando e sugeriremos um próximo passo claro.

Continue lendo

Mais guias sobre testes, IA e desenvolvimento moderno

Gostou deste artigo? Escolha um tópico e vá direto para nossos tutoriais mais recentes.

Inteligência artificial

Explicação das alucinações de IA: por que os modelos de linguagem inventam as coisas e como reduzi-las

Explicação das alucinações de IA: o que são, por que os modelos de linguagem as produzem, tipos comuns, como reduzi-las com aterramento e instruções…

Leia o artigo →
DevOps

Variáveis de ambiente explicadas: arquivos .env, segredos e configuração bem feitos

Variáveis de ambiente explicadas com exemplos de Python que executamos: leitura e configuração, por que cada valor é uma string, arquivos .env, hera…

Leia o artigo →
Desenvolvimento de software

Explicação da limitação de taxa de API: algoritmos, cabeçalhos e tratamento de erros 429

Limitação de taxa de API explicada com uma simulação que executamos: token bucket, janela fixa, janela deslizante, 429 respostas, cabeçalhos de limi…

Leia o artigo →
Automação de testes

Zombando em Python: unittest.mock, patch e os erros que fazem os testes mentirem

Zombaria em Python com unittest.mock, testado: Mock e return_value, side_effect, patch onde um nome é usado, especificação e autospec, zombaria de d…

Leia o artigo →
Teste de software

Cobertura de código explicada: cobertura de linha versus filial e o que 100% realmente significa

Cobertura de código explicada com uma execução cobertura.py real: cobertura de linha, ramal e condição, leitura de um relatório, por que 100% de cob…

Leia o artigo →
Bancos de dados e SQL

DELETE vs TRUNCATE vs DROP em SQL: diferenças, reversão e quando usar cada um

DELETE vs TRUNCATE vs DROP explicado com SQL testado: o que cada um remove, rollback, aciona, redefinição de identidade, velocidade e como PostgreSQ…

Leia o artigo →
Bancos de dados e SQL

Exibições SQL explicadas: crie, use e evite as armadilhas, com exemplos

Visualizações SQL explicadas com consultas que executamos: criação de uma visualização, resultados ao vivo, ocultação de colunas, desempenho, visual…

Leia o artigo →
Desenvolvimento de software

Interface TypeScript vs tipo: diferenças reais, testadas com o compilador

Interface TypeScript versus tipo, verificada com o compilador real: o que ambos podem fazer, o que apenas um pode fazer, mesclagem de declarações, e…

Leia o artigo →
Desenvolvimento de software

Python *args e **kwargs explicados: funções flexíveis com exemplos claros

Python *args e **kwargs explicados com o código que executamos: empacotamento e descompactação, ordem dos parâmetros, argumentos somente de palavras…

Leia o artigo →
Desenvolvimento de software

Funções Python Lambda: sintaxe, usos reais e quando não usá-los

Funções lambda do Python explicadas com o código que executamos: sintaxe, classificação com chave, mapa e filtro, fechamentos, armadilha de ligação …

Leia o artigo →
Inteligência artificial

O que são agentes de IA? Como eles funcionam, com um loop de agente simples que você pode executar

O que são agentes de IA? Um guia simples para o loop do agente, ferramentas, memória e proteções, com um pequeno loop Python que executamos, riscos …

Leia o artigo →
DevOps

Monitoramento versus observabilidade: a verdadeira diferença, com logs, métricas e rastreamentos

Explicação do monitoramento versus observabilidade: falhas conhecidas e desconhecidas, logs, métricas e rastreamentos, um passo a passo do incidente…

Leia o artigo →
DevOps

Docker Volumes vs Bind Mounts: persista os dados do contêiner da maneira certa

Volumes Docker versus montagens de ligação explicadas: por que os dados do contêiner desaparecem, volumes nomeados, montagens de ligação, tmpfs, exe…

Leia o artigo →
Automação de testes

TDD vs BDD: principais diferenças, um recurso criado de ambas as maneiras e quando usar cada um

TDD vs BDD explicado com um recurso de desconto construído em ambos os sentidos: refatoração vermelho-verde com o código que executamos, cenários da…

Leia o artigo →
Teste de software

Teste de aceitação do usuário (UAT): processo, lista de verificação e exemplos reais

Explicação do teste de aceitação do usuário: quem o executa, como ele difere do controle de qualidade, um processo de sete etapas, um modelo de caso…

Leia o artigo →
Bancos de dados e SQL

Valores SQL NULL explicados: IS NULL, COALESCE, NULLIF e as armadilhas a serem evitadas

Valores SQL NULL explicados com consultas que executamos: lógica de três valores, IS NULL, COALESCE, NULLIF, como agregações, junções e classificaçã…

Leia o artigo →
Bancos de dados e SQL

Instrução SQL CASE WHEN: sintaxe, exemplos reais e erros comuns

SQL CASE WHEN explicado com consultas que executamos: formulários simples e pesquisados, ordem de condição, pivôs com SUM, truques COUNT, classifica…

Leia o artigo →
Desenvolvimento de software

O que é JWT? JSON Web Tokens explicados com um exemplo prático

O que é JWT? JSON Web Tokens explicados: as três partes, um token construído e adulterado no código que executamos, JWT vs sessões, armazenamento, t…

Leia o artigo →
Desenvolvimento de software

Loop de eventos JavaScript explicado: pilha de chamadas, microtarefas e temporizadores com exemplos

O loop de eventos JavaScript explicado com o código que executamos: pilha de chamadas, filas de tarefas e microtarefas, por que setTimeout 0 não é i…

Leia o artigo →
Desenvolvimento de software

Geradores Python e rendimento explicado: economize memória com exemplos reais

Geradores Python e rendimento explicados com o código que executamos: como eles pausam e reiniciam, medem economia de memória, pipelines, sequências…

Leia o artigo →
Inteligência artificial

O que são incorporações? Similaridade de vetores e cossenos explicada de forma simples

O que são incorporações? Um guia em linguagem simples para vetores, similaridade de cossenos e pesquisa semântica, com um pequeno exemplo que execut…

Leia o artigo →
DevOps

Implantação azul-verde vs canário: diferenças, compensações e como escolher

Explicação da implantação azul-verde versus canário: como cada um funciona, custo, risco e reversão, agrupamento estável de usuários que testamos, m…

Leia o artigo →
Automação de testes

Testes instáveis: o que os causa e como corrigi-los para sempre

Testes instáveis explicados com demonstrações que executamos: as principais causas, como confirmar e diagnosticar uma, soluções adequadas para tempo…

Leia o artigo →
Teste de software

Teste de carga versus teste de estresse: diferenças, métricas e exemplos k6

Teste de carga versus teste de estresse explicado: o que cada um prova, testes de pico e absorção, as métricas que importam, por que as médias engan…

Leia o artigo →
Teste de software

Caso de teste versus cenário de teste: principais diferenças, exemplos e quando usar cada um

Caso de teste vs cenário de teste explicado: definições claras, uma tabela lado a lado, um recurso de redefinição de senha retirado de cenários para…

Leia o artigo →
Bancos de dados e SQL

Otimização de consultas SQL: leia planos de execução e corrija consultas lentas, com intervalos

Otimização de consulta SQL testada em um milhão de linhas: leia planos de execução, adicione os índices corretos, corrija filtros não sargáveis, use…

Leia o artigo →
Bancos de dados e SQL

SQL UNION vs UNION ALL: diferenças, exemplos e desempenho testado

SQL UNION vs UNION ALL explicado com consultas que executamos: duplicatas, as regras que ambos seguem, um bug de dados real, desempenho medido, INTE…

Leia o artigo →
Desenvolvimento de software

Tutorial da API JavaScript Fetch: GET, POST, tratamento de erros e tempos limite

Um tutorial da API JavaScript Fetch testado em um servidor local: GET e POST, por que 404 não lança, um auxiliar reutilizável, strings de consulta, …

Leia o artigo →
Desenvolvimento de software

Manipulação de arquivos Python: leitura, gravação, CSV, JSON e pathlib com exemplos

Manipulação de arquivos Python explicada com código que executamos: modos abertos, com, leitura de arquivos grandes, CSV, JSON, pathlib, arquivos bi…

Leia o artigo →
Desenvolvimento de software

Classes e objetos Python: tutorial OOP com exemplos reais

Classes e objetos Python explicados com código que executamos: __init__, métodos, atributos de classe vs instância, herança, propriedades, métodos d…

Leia o artigo →
Inteligência artificial

O que é um modelo de linguagem grande? Como funcionam os LLMs, explicado sem exageros

O que é um modelo de linguagem grande? LLMs explicados em linguagem simples: tokens, incorporações, atenção, treinamento, temperatura e janelas de c…

Leia o artigo →
DevOps

Comandos Linux para iniciantes: o guia essencial do terminal com exemplos

Comandos Linux para iniciantes, agrupados por tarefa: navegação, arquivos, visualização de logs, grep, pipes, permissões, processos e arquivos, com …

Leia o artigo →
Automação de testes

Selenium vs Playwright: principais diferenças, código comparado e qual escolher

Selenium vs Playwright comparado: arquitetura, espera, suporte a navegador e linguagem, depuração, o mesmo teste em ambas as ferramentas, conselhos …

Leia o artigo →
Teste de software

Particionamento de equivalência: técnica de design de teste explicada com exemplos resolvidos

Explicação do particionamento de equivalência: como encontrar partições válidas e inválidas, exemplos resolvidos para idades, senhas e cupons, teste…

Leia o artigo →
Teste de software

Gravidade vs Prioridade em Testes de Software: Diferenças, Matriz e Exemplos Reais

Explicação da gravidade versus prioridade em testes de software: definições claras, uma matriz de quatro vias com exemplos, escalas de nível, quem d…

Leia o artigo →
Bancos de dados e SQL

Tutorial de subconsultas SQL: tipos, subconsultas correlacionadas e EXISTS com exemplos

Um tutorial de subconsultas SQL com consultas que executamos: subconsultas escalares, IN, FROM e SELECT, subconsultas correlacionadas, EXISTS, a arm…

Leia o artigo →
Bancos de dados e SQL

Transações SQL e ACID explicados: COMMIT, ROLLBACK e níveis de isolamento

Transações SQL e ACID explicadas com uma transferência bancária que executamos: COMMIT, ROLLBACK, savepoints, locks, níveis de isolamento, leituras …

Leia o artigo →
Desenvolvimento de software

Folha de dicas dos comandos do Git: os comandos que você realmente usa, com exemplos

Uma folha de dicas de comandos Git agrupada por tarefa: configuração, preparação, ramificações, controles remotos, stash, histórico e desfazer erros…

Leia o artigo →
Desenvolvimento de software

Explicação das promessas de JavaScript: então, catch, Promise.all e erros comuns

Promessas JavaScript explicadas com o código que executamos: estados, cadeias then e catch, tratamento de erros, Promise.all, allSettled, race e any…

Leia o artigo →
Desenvolvimento de software

Tutorial do dicionário Python: métodos, exemplos e padrões comuns

Um tutorial de dicionário Python com código que executamos: criar, ler e atualizar dictos, métodos-chave, mesclagem, compreensão, padrões de contage…

Leia o artigo →
Inteligência artificial

O que é RAG? Geração aumentada de recuperação explicada com um exemplo prático

O que é RAG? Geração aumentada de recuperação explicada passo a passo: indexação, chunking, embeddings, recuperação, um pequeno exemplo funcional de…

Leia o artigo →
DevOps

Tutorial Terraform para iniciantes: infraestrutura como código do primeiro arquivo aos módulos

Um tutorial do Terraform para iniciantes: comece sem conta na nuvem, aprenda como iniciar, planejar e aplicar, depois variáveis, saídas, estado, mód…

Leia o artigo →
DevOps

Docker vs Kubernetes: principais diferenças, como eles funcionam juntos e o que você precisa

Docker vs Kubernetes explicado: o que cada um faz, o mesmo aplicativo rodando com ambos, Docker Compose e Swarm comparados, a mudança do dockershim …

Leia o artigo →
Automação de testes

Tutorial Pytest para iniciantes: luminárias, parametrização e exemplos reais

Um tutorial pytest para iniciantes com testes que executamos no pytest 9.2: asserções, fixtures, parametrizar, conftest, marcadores, tmp_path, monke…

Leia o artigo →
Teste de software

Ciclo de vida de teste de software (STLC): 6 fases, critérios de entrada e saída, exemplo

O ciclo de vida de teste de software explicou: seis fases do STLC com critérios de entrada e saída, resultados, um exemplo de recurso de login funci…

Leia o artigo →
Desenvolvimento de software

Git merge vs rebase: diferenças, exemplos e quando usar cada um

Git merge vs rebase explicado com saída real do log, uma tabela comparativa, a regra de ouro do rebase e um fluxo de trabalho seguro para equipes.

Leia o artigo →
Desenvolvimento de software

List comprehension em Python: sintaxe, exemplos e quando evitar

List comprehension em Python explicada: sintaxe, filtros, if-else, laços aninhados, tempos medidos e quando um laço for comum é a melhor escolha.

Leia o artigo →
Bancos de dados e SQL

SQL JOIN explicado com exemplos (Inner, Left, Right, Full)

Entenda os joins SQL passo a passo com tabelas e consultas de exemplo: INNER, LEFT, RIGHT, FULL, CROSS e SELF, além de erros comuns e dicas de desem…

Leia o artigo →