Oi, Estudante.
É muito bom ver que você compreendeu perfeitamente o conceito do git stash como uma "gaveta" para guardar alterações temporárias que ainda não foram consolidadas.
No cenário que você descreveu, o desafio é diferente: as alterações já foram consolidadas em um commit e enviadas para a ramificação principal (main ou master). Como o Product Owner (PO) pediu para remover essa funcionalidade do código atual, mas sem perder o histórico do que foi feito para o futuro, o git stash tradicional de arquivos modificados não resolve sozinho, pois o código já faz parte da história do repositório.
Pra resolver isso, existem boas práticas no Git. Vamos analisar as principais abordagens:
Abordagem 1: Criar uma nova Branch a partir do Commit (recomendado)
Esta é a forma mais organizada e segura de guardar esse trabalho para o futuro, mantendo o histórico limpo e sem risco de perder o código.
- Criar uma nova branch de segurança:
Primeiro, você cria uma ramificação a partir do commit que contém as alterações que o PO deseja adiar. Dessa forma, todo o trabalho fica salvo nessa nova linha de desenvolvimento.
git branch nome-da-funcionalidade-futura <hash-do-commit>
- Reverter as alterações na branch principal:
Agora que o código está salvo na outra branch, você precisa retirá-lo da branch principal. Para isso, usamos o comando git revert. Ele cria um novo commit que faz exatamente o inverso do commit original, desfazendo as alterações sem apagar o histórico de commits anterior (o que é crucial para ramos compartilhados).
git revert <hash-do-commit>
Depois, basta enviar essa reversão para o repositório remoto (git push). O código antigo sai de cena, o PO pode seguir com as novas prioridades, e quando a funcionalidade antiga voltar a ser requisitada, basta alternar para a branch nome-da-funcionalidade-futura.
Abordagem 2: Usar o Git Stash com commits (Stash de um commit)
Se a intenção for estritamente utilizar o conceito do stash para deixar o código guardado na lista de stashes, é possível transformar os efeitos de um commit de volta em modificações de trabalho e guardá-las.
- Reverter o commit mantendo as alterações no Working Directory:
Você pode usar o comando git revert com a flag --no-commit. Isso desfaz as alterações do commit indicado, mas deixa as modificações abertas na sua área de trabalho, prontas para serem manipuladas.
git revert --no-commit <hash-do-commit>
- Guardar na "gaveta" (Stash):
Como as modificações voltaram a ser apenas arquivos alterados no seu diretório de trabalho, agora você pode guardá-las no stash com uma mensagem clara:
git stash save "Funcionalidade adiada pelo PO"
- Atualizar o servidor:
Lembre-se de que o commit original ainda está no servidor remoto. Para alinhar o código sem aquela funcionalidade, você precisará commitar a reversão que foi gerada e fazer o push.
A primeira opção (criar uma branch dedicada) costuma ser a mais utilizada em ambientes profissionais, pois facilita a visualização do trabalho pendente por toda a equipe através do GitHub.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!