Status Curto
Exibe o status do diretório de trabalho e da área de staging de forma concisa. A flag -s (ou --short) mostra a saída em um formato abreviado e fácil de ler, indicando arquivos modificados, adicionados ou deletados.
git status -sFez besteira no código? Salve este guia. Os comandos essenciais para desfazer erros, reverter commits e salvar seu emprego.
Esta seção detalha comandos para verificar o estado atual do repositório, explorar o histórico de commits de forma avançada e visualizar mudanças em arquivos ou commits específicos. Essencial para entender o fluxo de trabalho e depurar o histórico.
Exibe o status do diretório de trabalho e da área de staging de forma concisa. A flag -s (ou --short) mostra a saída em um formato abreviado e fácil de ler, indicando arquivos modificados, adicionados ou deletados.
git status -sFornece uma saída de status formatada para ser facilmente parseada por scripts. É uma interface estável e não projetada para leitura humana, ideal para automação.
git status --porcelainInclui arquivos ignorados (listados no .gitignore) na saída do status, mostrando-os na seção "Untracked files". Útil para verificar se as regras de ignorar estão funcionando como esperado.
git status --ignoredExibe informações adicionais sobre a branch atual, como o nome da branch, se ela está à frente ou atrás do seu upstream, e o hash do commit atual.
git status --branchMostra a quantidade de stashes que você tem atualmente. Útil para lembrar se há mudanças guardadas que precisam ser aplicadas ou removidas.
git status --show-stashFornece uma visualização completa e compacta do histórico de commits. `--oneline` mostra cada commit em uma linha, `--graph` desenha um grafo ASCII do histórico, `--all` inclui branches remotas e tags, e `--decorate` mostra os nomes das branches e tags.
git log --oneline --graph --all --decorateExibe estatísticas de cada commit, mostrando quais arquivos foram modificados e o número de linhas adicionadas/deletadas. Útil para ter uma visão rápida do impacto de cada commit.
git log --statMostra o diff completo (patch) para cada commit, exibindo as mudanças exatas de linha a linha. Essencial para revisar o conteúdo de cada alteração.
git log --patchFiltra o histórico de commits para mostrar apenas aqueles feitos dentro de um período específico. Pode-se usar formatos como "2 weeks ago", "yesterday", "2023-01-01".
git log --since="2 weeks ago"Filtra o histórico para exibir apenas os commits feitos por um autor específico. O nome do autor deve corresponder ao configurado no Git.
git log --author="nome"Filtra o histórico de commits por uma palavra-chave ou padrão regex na mensagem do commit. Útil para encontrar commits relacionados a correções de bugs ou funcionalidades específicas.
git log --grep="fix"Busca commits que introduziram ou removeram uma string específica no código (também conhecido como "pickaxe" option). É poderoso para rastrear onde uma função ou variável foi alterada pela primeira vez.
git log -S "função"Exibe o histórico de um arquivo específico, seguindo seu histórico através de renomeações. Garante que você veja todas as mudanças no arquivo, mesmo que seu nome tenha mudado.
git log --follow arquivo.txtApresenta um log de commits altamente formatado e colorido, exibindo hash, branches/tags, mensagem, data relativa e autor. Personalizável para uma melhor legibilidade visual.
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'Uma visualização compacta e decorada do histórico, mostrando o grafo de branches e tags. Similar ao log completo, mas sem incluir todas as referências remotas por padrão.
git log --oneline --decorate --graphExibe o histórico de commits na ordem cronológica inversa, ou seja, do commit mais antigo para o mais recente. Útil para ver a evolução de um projeto.
git log --reverseMostra o conteúdo do último commit na branch atual, incluindo o diff. É uma forma rápida de revisar o que foi commitado mais recentemente.
git show HEADExibe o conteúdo do commit que está dois commits antes do HEAD. Pode-se usar qualquer referência de commit (hash, tag, branch, HEAD~n).
git show HEAD~2Mostra apenas os nomes dos arquivos que foram modificados no commit especificado, sem exibir o diff completo.
git show --name-only HEADExibe estatísticas de modificação para o commit especificado, mostrando quais arquivos foram alterados e o número de linhas adicionadas/deletadas.
git show --stat HEADComandos essenciais para criar, listar, gerenciar e deletar branches, tanto locais quanto remotas. Fundamental para o desenvolvimento colaborativo e organização do fluxo de trabalho em projetos Git.
Cria uma nova branch com o nome especificado (ex: `feature/nova-funcionalidade`) e imediatamente troca para ela. É um atalho para `git branch <nome>` seguido de `git checkout <nome>`.
git checkout -b feature/nova-funcionalidadeComando moderno e mais intuitivo para criar uma nova branch e trocar para ela. É a alternativa recomendada ao `git checkout -b` para essa finalidade.
git switch -c feature/nova-funcionalidadeLista todas as branches, incluindo as locais e as remotas. As branches remotas são prefixadas com o nome do remote (ex: `remotes/origin/main`).
git branch -aLista apenas as branches remotas. Útil para ver quais branches existem nos repositórios remotos sem poluir a saída com as locais.
git branch -rLista as branches locais com informações adicionais, como o último commit de cada branch e a mensagem do commit. Ajuda a ter uma visão rápida do estado de cada branch.
git branch -vLista as branches que já foram totalmente mergeadas na branch atual. Geralmente, são branches que podem ser deletadas com segurança.
git branch --mergedLista as branches que ainda não foram mergeadas na branch atual. Essas branches contêm trabalho que ainda não foi integrado e não devem ser deletadas sem cuidado.
git branch --no-mergedDeleta a branch local especificada (ex: `feature-branch`). Este é um "delete seguro" que falhará se a branch contiver commits não mergeados na branch atual.
git branch -d feature-branchForça a exclusão da branch local especificada, mesmo que ela contenha commits não mergeados. Use com cautela, pois pode resultar em perda de trabalho.
git branch -D feature-branchDeleta uma branch do repositório remoto (ex: `origin/feature-branch`). É o comando para remover branches remotas que não são mais necessárias.
git push origin --delete feature-branchRenomeia a branch local `old-name` para `new-name`. Se `old-name` for omitido, renomeia a branch atual.
git branch -m old-name new-nameForça a renomeação de uma branch, mesmo que a `new-name` já exista. Use com cuidado para evitar sobrescrever branches existentes.
git branch -M old-name new-nameExibe o nome da branch atual em que você está trabalhando. Útil para scripts ou para confirmar rapidamente a branch.
git branch --show-currentLista todas as branches que contêm o commit especificado (ex: `abc123`). Útil para rastrear onde um commit específico foi integrado.
git branch --contains abc123Lista as branches locais ordenadas pela data do último commit, do mais recente para o mais antigo. A flag `-` inverte a ordem.
git branch --sort=-committerdateComandos para integrar mudanças entre branches, seja através de um merge tradicional ou reorganizando o histórico com rebase. Inclui também o uso de cherry-pick para aplicar commits específicos. Essencial para manter um histórico de projeto limpo e organizado.
Integra as mudanças da `feature-branch` na branch atual. Se possível, realiza um fast-forward merge; caso contrário, cria um merge commit.
git merge feature-branchForça a criação de um merge commit, mesmo que um fast-forward merge fosse possível. Isso preserva o histórico de branches, mostrando explicitamente onde a feature foi integrada.
git merge --no-ff feature-branchAplica as mudanças da `feature-branch` na branch atual como um único commit, sem registrar a `feature-branch` no histórico. Os commits da `feature-branch` são "esmagados" em um único commit na branch de destino.
git merge --squash feature-branchInicia um rebase interativo nos últimos 3 commits a partir do HEAD. Permite reordenar, editar, esmagar (squash) ou dividir commits, e remover commits. Abre um editor de texto com as opções.
git rebase -i HEAD~3Inicia um rebase interativo de todos os commits na branch atual que não estão na branch `main`. Útil para limpar o histórico antes de fazer um merge na `main`.
git rebase -i mainContinua o processo de rebase após resolver conflitos de merge ou após editar um commit durante um rebase interativo.
git rebase --continueCancela o rebase em andamento e retorna a branch ao estado em que estava antes do início do rebase. Útil se você decidir não continuar ou se encontrar problemas insolúveis.
git rebase --abortAplica as mudanças introduzidas por um commit específico (ex: `abc123`) na branch atual, criando um novo commit com essas mudanças. Útil para portar correções ou funcionalidades pontuais.
git cherry-pick abc123Aplica um range de commits (do `abc123` exclusivo até o `def456` inclusivo) na branch atual. Útil para portar múltiplas mudanças de uma vez.
git cherry-pick abc123..def456Aplica as mudanças do commit `abc123` no diretório de trabalho e área de staging, mas sem criar um novo commit. Permite revisar e ajustar as mudanças antes de commitá-las.
git cherry-pick --no-commit abc123Aplica o commit `abc123` e adiciona uma linha "cherry-picked from commit abc123" à mensagem do novo commit, indicando a origem.
git cherry-pick -x abc123Aplica o commit `abc123` e adiciona uma linha "Signed-off-by: Your Name <your.email@example.com>" à mensagem do novo commit, indicando que você certifica a origem da mudança.
git cherry-pick --signoff abc123Cancela um cherry-pick em andamento e retorna a branch ao estado anterior. Útil se houver conflitos ou se o cherry-pick não for mais desejado.
git cherry-pick --abortFerramentas poderosas para buscar conteúdo dentro do código-fonte, investigar o histórico de modificações linha por linha e utilizar o `git bisect` para identificar o commit que introduziu um bug. Essencial para depuração e compreensão da evolução do código.
Busca por uma string ou padrão regex nos arquivos rastreados pelo Git no diretório de trabalho. É como um `grep` tradicional, mas otimizado para repositórios Git.
git grep "função"Busca por uma string ou padrão regex no código em um commit específico (ex: `HEAD~5`). Útil para encontrar onde uma string existia em um ponto anterior do histórico.
git grep "função" HEAD~5Busca por uma string e exibe os números de linha onde a correspondência foi encontrada. Ajuda a localizar rapidamente a ocorrência no arquivo.
git grep -n "função"Realiza uma busca case insensitive, ignorando a diferença entre letras maiúsculas e minúsculas ao procurar pela string.
git grep -i "função"Mostra o histórico de revisões linha por linha para um arquivo específico. Para cada linha, exibe o commit que a modificou pela última vez, o autor e a data. Útil para identificar quem e quando alterou uma parte do código.
git blame arquivo.txtRestringe a saída do `git blame` a um intervalo específico de linhas (da linha 10 à 20, inclusivo) de um arquivo. Útil para focar em uma seção problemática.
git blame -L 10,20 arquivo.txtExibe o histórico de commits que afetaram o `arquivo.txt`, incluindo o patch (diff) completo de cada alteração. Permite ver exatamente como o arquivo evoluiu.
git log -p arquivo.txtExibe o histórico de um arquivo específico, seguindo seu histórico através de renomeações. Garante que você veja todas as mudanças no arquivo, mesmo que seu nome tenha mudado.
git log --follow arquivo.txtInicia uma sessão de `git bisect`, que é uma ferramenta para encontrar o commit que introduziu um bug usando uma busca binária no histórico.
git bisect startMarca o commit atual (HEAD) como "ruim", indicando que o bug está presente neste ponto.
git bisect bad HEADMarca um commit conhecido (ex: `v1.0.0`) como "bom", indicando que o bug não estava presente neste ponto. O Git então escolhe um commit intermediário para você testar.
git bisect good v1.0.0Automatiza o processo de bisect executando um script ou comando (ex: `npm test`) em cada commit. O script deve retornar 0 para "bom" e um código de erro (1-127) para "ruim".
git bisect run npm testFinaliza a sessão de `git bisect` e retorna a branch ao commit em que estava antes de iniciar o bisect.
git bisect resetAbre uma interface gráfica (se configurada) para visualizar o grafo de commits e o progresso do bisect.
git bisect visualizeMostra o log de todos os comandos `git bisect` executados na sessão atual, útil para revisar o processo.
git bisect logRepete uma sessão de bisect a partir de um arquivo de log previamente salvo, permitindo recriar o processo de depuração.
git bisect replay arquivo.logComandos para gerenciar o "stash" do Git, uma área temporária para guardar mudanças não commitadas quando você precisa trocar de branch ou lidar com uma interrupção. Permite salvar o estado do diretório de trabalho e da área de staging para aplicar posteriormente.
Salva as mudanças não commitadas (modificações no diretório de trabalho e arquivos staged) em uma pilha de stashes, revertendo o diretório de trabalho para o estado do último commit. Arquivos não rastreados não são incluídos por padrão.
git stashSalva as mudanças com uma mensagem descritiva. A mensagem ajuda a identificar o conteúdo do stash posteriormente, especialmente quando há vários stashes.
git stash push -m "WIP: feature X"Salva apenas as mudanças de um arquivo específico no stash, deixando outros arquivos inalterados. O `--` é necessário para distinguir o caminho do arquivo de outras opções.
git stash push -- arquivo.txtSalva as mudanças, incluindo também os arquivos não rastreados (untracked files) no stash. Útil para guardar todo o estado do diretório de trabalho.
git stash push --include-untrackedLista todos os stashes atualmente armazenados, mostrando uma breve descrição e o índice de cada um (ex: `stash@{0}`).
git stash listExibe um resumo das mudanças contidas em um stash específico (ex: `stash@{0}`). Mostra quais arquivos foram modificados.
git stash show stash@{0}Mostra o patch completo (diff) de um stash específico, exibindo as mudanças linha a linha. Essencial para revisar o conteúdo antes de aplicar.
git stash show -p stash@{0}Aplica as mudanças de um stash específico no diretório de trabalho, mas mantém o stash na pilha. Útil se você quiser aplicar o mesmo stash em várias branches.
git stash apply stash@{0}Aplica as mudanças de um stash específico no diretório de trabalho e, em seguida, remove o stash da pilha. É o comando mais comum para aplicar e limpar stashes.
git stash pop stash@{0}Remove um stash específico da pilha sem aplicar suas mudanças. Útil para descartar stashes que não são mais necessários.
git stash drop stash@{0}Remove todos os stashes da pilha. Use com extrema cautela, pois esta ação é irreversível.
git stash clearCria uma nova branch a partir do commit onde o stash foi criado, aplica o stash nela e, em seguida, remove o stash da pilha. Útil para continuar o trabalho de um stash em uma nova branch.
git stash branch nova-branch stash@{0}Salva as mudanças não staged no stash, mas mantém as mudanças que já estavam na área de staging. Útil para commitar apenas parte das mudanças e guardar o restante.
git stash --keep-indexComandos poderosos para desfazer mudanças, reverter o histórico de commits e recuperar arquivos ou estados anteriores. Inclui o `git reset` (com suas variações de cautela) e o `git restore` (comando moderno e mais seguro), além do `git reflog` para recuperação de commits perdidos. ⚠️ ATENÇÃO: O comando `git reset --hard` é irreversível e perderá todas as mudanças não commitadas no diretório de trabalho e na área de staging. Use com extrema cautela! 💡 DICA: O `git reflog` é um salva-vidas! Mesmo após um `git reset --hard`, você pode recuperar commits perdidos usando o reflog para encontrar o hash do commit e então `git reset --hard <hash>`.
Desfaz o último commit, movendo o HEAD para o commit anterior, mas mantém as mudanças do commit desfeito na área de staging. O diretório de trabalho permanece inalterado.
git reset --soft HEAD~1Desfaz o último commit e move as mudanças do commit desfeito para o diretório de trabalho (não staged). É o comportamento padrão do `git reset` se nenhuma flag for especificada. A área de staging é limpa.
git reset --mixed HEAD~1Desfaz o último commit, descarta todas as mudanças do commit desfeito do diretório de trabalho e da área de staging. Esta ação é irreversível e pode resultar em perda de trabalho não commitado. Use com extrema cautela!
git reset --hard HEAD~1Descarta as mudanças no `arquivo.txt` no diretório de trabalho, restaurando-o para o estado do último commit. É uma alternativa mais segura e intuitiva para `git checkout -- arquivo.txt`.
git restore arquivo.txtRemove o `arquivo.txt` da área de staging, movendo suas mudanças de volta para o diretório de trabalho (unstage). O arquivo no diretório de trabalho permanece inalterado.
git restore --staged arquivo.txtRestaura o `arquivo.txt` no diretório de trabalho e na área de staging para o estado em que ele estava em um commit específico (ex: `HEAD~1`). Útil para recuperar versões antigas de arquivos.
git restore --source=HEAD~1 arquivo.txtExibe um log de todas as ações que modificaram o HEAD do repositório local. É um histórico de "onde o HEAD esteve", permitindo recuperar commits que parecem ter sido perdidos após resets ou rebases.
git reflogExibe o reflog para uma branch específica (ex: `main`), mostrando todas as vezes que a referência `main` foi atualizada.
git reflog show mainVolta o HEAD (e a branch atual) para um estado anterior registrado no reflog (neste caso, o segundo estado mais recente). É a principal forma de recuperar commits após um `git reset --hard` acidental.
git reset --hard HEAD@{2}Comandos avançados para gerenciar repositórios remotos, sincronizar branches, e colaborar efetivamente em projetos Git. Aborda desde a configuração de remotes até estratégias de fetch, pull e push para garantir um fluxo de trabalho colaborativo robusto.
Lista os repositórios remotos configurados para o projeto, mostrando seus nomes e URLs (verbose). Útil para verificar de onde você está puxando e para onde está enviando.
git remote -vAdiciona um novo repositório remoto com o nome `upstream` e a URL especificada. Comum para configurar um remote para o repositório original em um fork.
git remote add upstream https://...Altera a URL de um repositório remoto existente (ex: `origin`). Útil para atualizar o local de um repositório ou mudar entre SSH e HTTPS.
git remote set-url origin https://...Remove um repositório remoto com o nome `upstream` da configuração local. Isso não afeta o repositório remoto em si.
git remote remove upstreamBaixa objetos e referências de todos os repositórios remotos configurados. Não integra as mudanças no diretório de trabalho, apenas atualiza as referências remotas locais.
git fetch --allRemove as referências locais para branches remotas que foram deletadas no repositório remoto. Ajuda a manter a lista de branches remotas limpa e atualizada.
git fetch --pruneBaixa as mudanças do repositório remoto e, em seguida, aplica suas mudanças locais em cima delas usando rebase. Isso evita commits de merge desnecessários e mantém um histórico linear.
git pull --rebaseBaixa as mudanças do repositório remoto e tenta realizar um fast-forward merge. Se um fast-forward não for possível (ou seja, há commits locais que não são ancestrais do remote), o comando falha, exigindo um merge manual ou rebase.
git pull --ff-onlyEnvia a `feature-branch` para o repositório remoto `origin` e configura-a como a branch de upstream. Isso permite usar `git pull` e `git push` sem especificar o remote e a branch posteriormente.
git push -u origin feature-branchEnvia as mudanças para o repositório remoto, forçando a sobrescrita do histórico, mas com uma salvaguarda. Só funciona se o branch remoto não tiver sido atualizado por outra pessoa desde o seu último fetch, prevenindo sobrescritas acidentais de trabalho alheio.
git push --force-with-leaseDeleta a `feature-branch` do repositório remoto `origin`. O `:` antes do nome da branch local indica que você está enviando "nada" para a branch remota, efetivamente deletando-a.
git push origin :feature-branchEnvia todas as branches locais para o repositório remoto `origin`. Útil para garantir que todas as suas branches estejam sincronizadas com o remote.
git push --all originEspelha o repositório local no repositório remoto `origin`. Isso significa que todas as branches, tags e referências do local serão replicadas no remoto, incluindo a exclusão de qualquer coisa que não esteja no local. Use com extrema cautela, pois é uma operação destrutiva.
git push --mirror originEnvia todas as tags locais para o repositório remoto, e também envia quaisquer commits que sejam referenciados por essas tags (se ainda não estiverem no remote). `--follow-tags` garante que tags anotadas que apontam para commits que ainda não foram enviados também sejam enviadas.
git push --tags --follow-tags