<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Matilha do Codigo</title>
    <description>The latest articles on DEV Community by Matilha do Codigo (@matilhadocodigo).</description>
    <link>https://dev.to/matilhadocodigo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3829979%2F5c9c5de8-a37e-4e03-918e-f7cf8939681c.png</url>
      <title>DEV Community: Matilha do Codigo</title>
      <link>https://dev.to/matilhadocodigo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/matilhadocodigo"/>
    <language>en</language>
    <item>
      <title>Git além do push: os comandos que ninguém te ensinou</title>
      <dc:creator>Matilha do Codigo</dc:creator>
      <pubDate>Fri, 10 Apr 2026 13:28:58 +0000</pubDate>
      <link>https://dev.to/matilhadocodigo/git-alem-do-push-os-comandos-que-ninguem-te-ensinou-aca</link>
      <guid>https://dev.to/matilhadocodigo/git-alem-do-push-os-comandos-que-ninguem-te-ensinou-aca</guid>
      <description>&lt;p&gt;Todo mundo aprende Git da mesma forma: &lt;code&gt;git init&lt;/code&gt;, &lt;code&gt;git add .&lt;/code&gt;, &lt;code&gt;git commit -m "primeiro commit"&lt;/code&gt;, &lt;code&gt;git push&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;E aí fica parado aí.&lt;/p&gt;

&lt;p&gt;O problema é que o Git tem um repertório enorme de comandos que fazem diferença no dia a dia — e que praticamente nenhum tutorial para iniciantes menciona. Você só descobre quando algo dá errado, às 23h, com pull request aberto.&lt;/p&gt;

&lt;p&gt;Esse artigo é pra mudar isso.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;code&gt;git stash&lt;/code&gt; — o bolso secreto do Git
&lt;/h2&gt;

&lt;p&gt;Você está no meio de uma feature, o código tá pela metade, e chega uma mensagem: &lt;em&gt;"precisa corrigir um bug urgente na main"&lt;/em&gt;. O que você faz?&lt;/p&gt;

&lt;p&gt;Se você fizer &lt;code&gt;git checkout&lt;/code&gt; assim, o Git vai reclamar. Se fizer commit, vai sujar seu histórico com um "WIP: salvando para mudar de branch".&lt;/p&gt;

&lt;p&gt;A solução é o &lt;code&gt;stash&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso guarda todas as suas alterações não commitadas num lugar temporário e deixa o diretório limpo. Aí você resolve o bug, volta, e restaura:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash pop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quer ver o que tem salvo?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você pode ter vários stashes e dar nome a eles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash push &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feature de login pela metade"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. &lt;code&gt;git log --oneline&lt;/code&gt; — porque o log padrão é horrível
&lt;/h2&gt;

&lt;p&gt;Já abriu um &lt;code&gt;git log&lt;/code&gt; e ficou olhando pra aquele bloco gigante de texto? Tem um jeito muito melhor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log &lt;span class="nt"&gt;--oneline&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Saída:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a3f1c2e feat: adiciona autenticação JWT
9b2d441 fix: corrige validação do formulário
3c8e109 chore: atualiza dependências
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Limpo, legível, um commit por linha.&lt;/p&gt;

&lt;p&gt;Quer ver as branches também?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log &lt;span class="nt"&gt;--oneline&lt;/span&gt; &lt;span class="nt"&gt;--graph&lt;/span&gt; &lt;span class="nt"&gt;--all&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso desenha uma árvore visual das branches no terminal. Parece coisa de hacker, mas é só Git.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. &lt;code&gt;git diff&lt;/code&gt; — antes de commitar, veja o que você fez
&lt;/h2&gt;

&lt;p&gt;Sabe aquele momento em que você digita &lt;code&gt;git add .&lt;/code&gt; sem nem olhar o que tá mudando? Pois é, todo mundo faz. Mas o jeito certo é revisar antes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git diff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso mostra &lt;strong&gt;linha por linha&lt;/strong&gt; o que mudou nos arquivos que ainda não foram adicionados ao staging.&lt;/p&gt;

&lt;p&gt;Já adicionou com &lt;code&gt;git add&lt;/code&gt; e quer revisar antes de commitar?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git diff &lt;span class="nt"&gt;--staged&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Diferença específica entre dois commits?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git diff abc1234 def5678
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Revisar o diff virou hábito quando você para de commitar lixo acidentalmente.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. &lt;code&gt;git commit --amend&lt;/code&gt; — consertando o último commit
&lt;/h2&gt;

&lt;p&gt;Commitou com a mensagem errada? Esqueceu de incluir um arquivo? Não precisa criar um novo commit só por isso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;--amend&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso abre o editor com a mensagem do último commit para você editar. Salva, fecha, e pronto.&lt;/p&gt;

&lt;p&gt;Quer mudar a mensagem direto sem abrir o editor?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feat: adiciona autenticação com JWT"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quer incluir um arquivo esquecido?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add arquivo-esquecido.py
git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;--no-edit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Atenção:&lt;/strong&gt; só use &lt;code&gt;--amend&lt;/code&gt; em commits que ainda &lt;strong&gt;não foram enviados para o repositório remoto&lt;/strong&gt;. Se você já fez push, vai ter problemas na hora de fazer push novamente.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. &lt;code&gt;git restore&lt;/code&gt; — desfazendo alterações sem drama
&lt;/h2&gt;

&lt;p&gt;Você mudou um arquivo e se arrependeu. Quer voltar para como estava no último commit?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git restore nome-do-arquivo.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso descarta todas as alterações locais naquele arquivo. Sem commit, sem complicação.&lt;/p&gt;

&lt;p&gt;Quer desfazer um &lt;code&gt;git add&lt;/code&gt; (tirar do staging)?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git restore &lt;span class="nt"&gt;--staged&lt;/span&gt; nome-do-arquivo.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso não apaga as mudanças, só retira o arquivo da área de staging. As alterações continuam lá.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. &lt;code&gt;git revert&lt;/code&gt; — desfazendo um commit sem reescrever a história
&lt;/h2&gt;

&lt;p&gt;Fez um commit que não devia? A tentação é usar &lt;code&gt;git reset&lt;/code&gt;, mas tem um problema: ele reescreve o histórico, o que pode causar bagunça em times.&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;git revert&lt;/code&gt; é mais seguro: ele cria um &lt;strong&gt;novo commit&lt;/strong&gt; que desfaz as mudanças do commit anterior:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git revert abc1234
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O histórico continua intacto, você só adiciona um commit novo que reverte o estrago. Perfeito para trabalhar em equipe.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. &lt;code&gt;git cherry-pick&lt;/code&gt; — pegando só o que você quer
&lt;/h2&gt;

&lt;p&gt;Imagina que você tem um bugfix numa branch de feature, mas precisa aplicar esse fix na &lt;code&gt;main&lt;/code&gt; agora, sem fazer merge de tudo.&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;cherry-pick&lt;/code&gt; pega um commit específico e aplica em outra branch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git cherry-pick abc1234
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vai até a branch de destino, roda esse comando com o hash do commit que você quer, e pronto. Só aquele commit é copiado.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bônus: aliases que vão te poupar tempo
&lt;/h2&gt;

&lt;p&gt;Cansado de digitar &lt;code&gt;git log --oneline --graph --all&lt;/code&gt; toda hora? Cria um alias:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.tree &lt;span class="s2"&gt;"log --oneline --graph --all"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora é só digitar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git tree
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você pode criar aliases para qualquer comando. Alguns que uso bastante:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.st &lt;span class="s2"&gt;"status"&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.co &lt;span class="s2"&gt;"checkout"&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.unstage &lt;span class="s2"&gt;"restore --staged"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Resumindo
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;th&gt;Quando usar&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git stash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Guardar trabalho em progresso para trocar de contexto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git log --oneline&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ver histórico de forma legível&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git diff --staged&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Revisar o que vai entrar no próximo commit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git commit --amend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Corrigir o último commit (mensagem ou arquivos)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git restore&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Desfazer alterações em arquivos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git revert&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Desfazer um commit com segurança em equipe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git cherry-pick&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Aplicar um commit específico em outra branch&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Esses comandos não são avançados — eles são &lt;strong&gt;essenciais&lt;/strong&gt;. São o que separa alguém que "usa Git" de alguém que realmente trabalha bem com ele.&lt;/p&gt;

&lt;p&gt;Tem algum comando que salvou sua vida e não tá nessa lista? Comenta aí 👇&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Esse artigo faz parte do conteúdo semanal da **Matilha do Código&lt;/em&gt;* — uma comunidade pra quem quer aprender Python, Git e SQL de verdade, sem enrolação. Me segue aqui no dev.to e no Instagram &lt;a href="https://instagram.com" rel="noopener noreferrer"&gt;@matilhadocodigo&lt;/a&gt; pra não perder os próximos.*&lt;/p&gt;

</description>
      <category>git</category>
      <category>iniciante</category>
      <category>produtividade</category>
      <category>terminal</category>
    </item>
  </channel>
</rss>
