Qual a diferença entre `git stash` e `git clean`?

O Git é uma das ferramentas de controle de versão mais utilizadas por desenvolvedores de software em todo o mundo. Entre os vários comandos e funcionalidades oferecidos pelo Git, dois são especialmente importantes para gerenciar mudanças temporárias em seu repositório: git stash e git clean. Embora ambos ajudem a limpar e organizar o repositório, eles servem a propósitos distintos. Neste artigo, vamos explorar em detalhes a diferença entre esses dois comandos e como você pode usá-los de forma eficaz no seu fluxo de trabalho.

O que é o comando git stash?

O git stash é um comando utilizado para guardar temporariamente as modificações não comitadas em seu repositório Git. Esse comando é especialmente útil quando você está no meio de uma tarefa, mas precisa mudar para outra branch rapidamente e não quer comprometer ou perder o trabalho atual. Ele permite que você “guarde” suas alterações e retome o trabalho mais tarde.

Quando você executa git stash, o Git cria uma cópia temporária de suas modificações e reverte seu diretório de trabalho e índice para o estado do último commit. As alterações que foram salvas no stash podem ser recuperadas posteriormente com o comando git stash apply ou git stash pop.

Exemplo de uso do git stash

git stash
# Mudança de branch
git checkout outra-branch
# Após terminar o trabalho na outra branch
git checkout sua-branch
git stash apply

Note que o comando git stash apply aplica as mudanças salvas no stash, mas mantém o stash intacto. Caso você queira aplicar e remover o stash ao mesmo tempo, pode usar o comando git stash pop.

O que é o comando git clean?

Por outro lado, o git clean é utilizado para remover arquivos não rastreados do seu diretório de trabalho. Arquivos não rastreados são aqueles que não foram adicionados ao índice do Git (ou seja, ainda não foram preparados para commit). Esses arquivos podem ser gerados por compilação, testes ou modificações locais que não fazem parte do repositório Git, mas ainda estão presentes no seu sistema de arquivos.

O comando git clean ajuda a manter seu diretório de trabalho limpo, removendo esses arquivos desnecessários. A vantagem do git clean é que ele não afeta os arquivos que estão sendo rastreados pelo Git. Ele é especialmente útil quando você deseja limpar arquivos temporários ou gerar um estado “limpo” antes de iniciar uma nova tarefa no seu repositório.

Exemplo de uso do git clean

git clean -n
# Para visualizar os arquivos que seriam removidos

git clean -f
# Para realmente remover os arquivos não rastreados

A opção -n mostra os arquivos que seriam removidos, mas sem realizar a exclusão. Já a opção -f força a remoção dos arquivos não rastreados.

Principais diferenças entre git stash e git clean

Agora que entendemos o que cada comando faz, vamos discutir as principais diferenças entre o git stash e o git clean:

  • Objetivo: O git stash armazena temporariamente as alterações no seu repositório sem comprometê-las, enquanto o git clean remove permanentemente os arquivos não rastreados do diretório de trabalho.
  • Escopo de aplicação: O git stash afeta apenas as modificações rastreadas e não comitadas no índice ou no diretório de trabalho, enquanto o git clean afeta exclusivamente os arquivos não rastreados.
  • Recuperação de dados: Com o git stash, você pode recuperar suas alterações a qualquer momento usando git stash apply ou git stash pop, enquanto o git clean remove os arquivos de forma irreversível (a menos que você tenha uma cópia de backup desses arquivos).
  • Uso no fluxo de trabalho: O git stash é útil quando você precisa alternar entre branches e preservar seu trabalho temporário, enquanto o git clean é ideal para remover arquivos temporários e manter seu repositório organizado.

Quando usar git stash e git clean?

Ambos os comandos são extremamente úteis, mas eles devem ser usados em contextos diferentes:

Quando usar git stash:

  • Quando você deseja salvar temporariamente suas alterações e mudar de branch sem perder seu trabalho.
  • Quando você quer preservar modificações em andamento, mas precisa de uma área limpa para realizar uma nova tarefa ou correção.
  • Quando você precisa compartilhar seu trabalho sem comitar, como quando está trabalhando em uma branch de feature e quer retornar mais tarde.

Quando usar git clean:

  • Quando você deseja remover arquivos temporários ou desnecessários que não fazem parte do seu repositório Git.
  • Quando você quer garantir que seu diretório de trabalho esteja limpo antes de iniciar uma nova tarefa ou garantir um ambiente de compilação limpo.
  • Quando você quer eliminar arquivos não rastreados que não são mais necessários.

Conclusão

Em resumo, os comandos git stash e git clean têm finalidades distintas, mas são ferramentas essenciais para a gestão de alterações temporárias e a manutenção da organização de seu repositório Git. O git stash permite que você guarde temporariamente suas alterações e retome o trabalho mais tarde, enquanto o git clean ajuda a remover arquivos não rastreados do seu diretório de trabalho, mantendo seu repositório mais limpo e organizado. Conhecer a diferença entre esses dois comandos e quando usá-los pode melhorar significativamente o seu fluxo de trabalho no Git, garantindo que você possa trabalhar de forma mais eficiente e organizada.

Perguntas Frequentes

1. O que acontece com as alterações quando uso o git stash?

Quando você executa git stash, suas alterações são salvas em uma pilha interna do Git, e o diretório de trabalho e o índice são revertidos para o último commit. Você pode aplicar essas mudanças de volta a qualquer momento usando git stash apply ou git stash pop.

2. Posso recuperar arquivos excluídos com git clean?

Não, uma vez que os arquivos não rastreados são removidos com o comando git clean, eles são permanentemente excluídos, a menos que você tenha uma cópia de backup desses arquivos.

3. O comando git clean pode afetar arquivos rastreados?

Não, o git clean afeta apenas arquivos não rastreados. Arquivos que já estão sendo rastreados pelo Git não serão removidos pelo comando.

Agora que você conhece as diferenças e os usos de git stash e git clean, pode aplicá-los de forma mais eficaz em seu fluxo de trabalho no Git. Experimente ambos os comandos e veja como eles podem ajudar a otimizar sua experiência de desenvolvimento.