Aula 10Git no dia a dia: versões e sessões
Prefere o app? Volte para esta aula na versão do app Claude Desktop
O vídeo desta aula está na versão do app.
Ver o vídeo na versão do appObjetivos
Ao final desta aula você vai saber:
- Ver as versões guardadas da sua página e o que mudou entre elas
- Voltar para a última versão guardada quando uma mudança der errado
- Trazer um arquivo de volta como estava numa versão antiga, sem apagar nenhuma versão
- A diferença entre o
/rewinde uma versão guardada - Retomar uma conversa e dar nome a ela, com
claude --continue,claude --resume,/resumee/rename - Deixar pronta uma trava para o Claude sempre perguntar antes de enviar a sua página para o GitHub
Desde a Aula 06, você guarda versões da sua página: a página antes do cardápio, o cardápio com filtro, o formulário de encomenda. Nesta aula, você usa essas versões no dia a dia: para ver o que mudou, para voltar quando algo der errado e para continuar uma conversa com o Claude de onde ela parou, mesmo no dia seguinte.
💡 Para usar o Git, não precisa de comando especial. Não existe
/commit: basta pedir em português, e o Claude escolhe e roda os comandos do Git. No começo de cada conversa, ele já recebe um resumo da pasta: em que linha de versões você está, o que mudou desde a última versão guardada e as versões mais recentes.
Ver as versões guardadas
Peça:
Me mostre as versões guardadas, da mais nova para a mais velha, em português simples.
A lista das versões guardadas é o histórico (o Git chama de log). A resposta vem mais ou menos assim, com as suas mensagens e as suas datas:
Você tem 4 versões guardadas, da mais nova para a mais velha:
1. Formulário de encomenda pelo WhatsApp (ontem)
2. Arquivo com as decisões de cores e textos (há 2 dias)
3. Cardápio com filtro por tipo de doce (há 3 dias)
4. Página antes do cardápio (há 3 dias)Para ver o que mudou de uma ponta à outra, peça:
O que mudou entre a primeira e a última?
A primeira é a que você guardou na Aula 06, antes do cardápio, e a última é a mais nova. O Claude compara as duas e conta, em português, o que entrou e o que saiu: os três doces viraram seis, apareceram os botões do filtro, o formulário de encomenda e o arquivo de decisões.
Os dois pedidos usam comandos do Git que só olham, como o git log e o git diff. Esses rodam sem pedir licença, até no Manual. Os que mudam alguma coisa esperam a sua aprovação, e você vai ver um daqui a pouco.
💡 Cada versão tem um código, uma sequência de letras e números como
3f9a2c1. Você não precisa decorar nenhum: chame a versão pela frase dela, como "a versão do cardápio com filtro", e o Claude encontra.
Errou? Volte para a última versão guardada
Agora, um erro de propósito, para você treinar a volta. Antes, confira se está tudo guardado:
Tem alguma mudança que ainda não foi guardada numa versão?
Esse também é um comando que só olha. Se tiver alguma mudança, guarde uma versão antes, como na Aula 06. Você já vai entender por quê.
Agora, o erro. Peça:
Deixe o texto de boas-vindas em amarelo-claro.
Se o Claude avisar que vai ficar difícil de ler, ele está certo: diga que é de propósito, para treinar. Aprove a mudança. Abra a página no navegador, no modo claro (ou atualize, se ela já estava aberta), tire um print e cole na caixa de texto (Ctrl + V, ou Alt + V no Windows), perguntando: "dá para ler o texto de boas-vindas?". Sobre o fundo branco, o amarelo-claro quase some. Era esse o erro.
Para voltar, peça:
Desfaça as mudanças desde a última versão guardada.
Isso é desfazer até a última versão guardada: o Claude roda um comando do Git (em geral, o git restore) que joga fora as mudanças ainda não guardadas e devolve os arquivos ao jeito da última versão. As versões guardadas não mudam.
Como o comando muda arquivos, no Manual o pedido de permissão aparece antes, com o comando, algo como git restore index.html. É uma boa hora para praticar a Aula 05: desça até No (não), aperte Tab e escreva "antes, explique em português simples o que esse comando faz e se ele apaga alguma coisa". A explicação deve dizer algo como "joga fora as mudanças do index.html que ainda não foram guardadas e não mexe em nenhuma versão guardada". Fez sentido? Aprove com Yes (sim) quando o pedido aparecer de novo.
Atualize a página (F5, ou Command + R no Mac): o texto de boas-vindas voltou a ser como era. Pronto é isto: dá para ler de novo.
⚠️ Desfazer joga fora tudo o que não foi guardado, não só o erro. Se você tivesse feito uma mudança boa depois da última versão guardada, ela iria junto com o amarelo. Por isso a conferência do começo, e por isso a regra da Aula 06: guarde uma versão sempre que algo funcionar. É também por isso que, no modo auto, a checagem barra por padrão os comandos que jogam fora o que não foi guardado, como o
git restore .. Um arquivo novo, que nunca entrou numa versão, continua na pasta: esse comando não mexe nele.
Voltar um arquivo para uma versão antiga, sem apagar nenhuma
E se o erro já estiver numa versão guardada? Imagine que você guardou uma mudança no cardápio e, dias depois, percebeu que preferia o de antes. Desfazer até a última versão guardada não adianta, porque o erro está nela. Peça, com o nome da versão que você quer, como ele aparece no histórico:
Volte o index.html para como estava na versão "Cardápio com filtro por tipo de doce", sem apagar nenhuma versão guardada.
O Claude traz o arquivo de volta como ele era naquela versão, e o histórico continua inteiro. Confira na página e, se ficou bom, guarde uma versão nova, como "cardápio de volta ao de antes". O histórico ganha uma versão e não perde nenhuma: se você mudar de ideia, dá para voltar a qualquer uma, do mesmo jeito.
⚠️ O arquivo volta inteiro. Tudo o que entrou no
index.htmldepois daquela versão sai dele, inclusive o que estava bom. No exemplo, o formulário de encomenda, que veio depois, sumiria da página. Ele não se perde, porque continua nas versões mais novas, mas confira a página com calma antes de guardar. Para trazer de volta só uma parte, diga qual: "traga de volta só o cardápio daquela versão e deixe o resto como está".
"Sem apagar nenhuma versão guardada" é a parte do pedido que protege você. Existem comandos que voltam a pasta inteira e tiram do histórico as versões mais novas, como o git reset --hard. O modo auto barra esse comando por padrão, e no Manual você vê o pedido antes. Se ele aparecer, recuse e pergunte por quê.
O /rewind e as versões guardadas
Na Aula 09, você conheceu o /rewind (ou Esc duas vezes, com a caixa de texto vazia), que volta a conversa e os arquivos para um ponto anterior. Ele também desfaria o amarelo, porque foi o Claude quem mudou o arquivo, nesta conversa. Mas os dois não são a mesma coisa:
/rewind |
Versão guardada | |
|---|---|---|
| Volta para | um ponto desta conversa | uma versão que você guardou |
| Vale para | o que o Claude mudou nos arquivos, nesta conversa | a pasta inteira, não importa quem mudou nem quando |
| Não desfaz | o que um comando mudou, nem o que você mudou por fora | o que ainda não foi guardado |
| Dura | cerca de 30 dias | enquanto existir a pasta .git |
A própria documentação do Claude Code resume assim: o /rewind serve para recuperar algo rápido, dentro da conversa; para um histórico que fica, use o Git. Na prática, guarde uma versão sempre que algo funcionar: é o ponto de volta que não some.
Sessões: continue de onde parou
Cada conversa com o Claude fica salva, ligada à pasta em que você abriu o Claude Code. É o que o Claude Code chama de sessão. Fechou o terminal no meio de uma tarefa? No dia seguinte, dá para voltar à mesma conversa, com tudo o que vocês combinaram. As conversas ficam guardadas por 30 dias.
| Comando | O que faz |
|---|---|
claude --continue |
Reabre a conversa mais recente desta pasta |
claude --resume |
Mostra a lista das conversas desta pasta, para você escolher |
/resume |
Mostra a mesma lista sem sair do Claude Code, para trocar de conversa |
/rename formulario |
Dá um nome à conversa atual. O nome passa a aparecer junto da caixa de texto |
claude --resume formulario |
Volta direto para a conversa com esse nome |
Os comandos que começam com claude são digitados no terminal, dentro da pasta da página (cd Documents/confeitaria), no lugar do claude de sempre. Os que começam com barra vão na caixa de texto do Claude Code. Na lista, as setas escolhem a conversa, Enter abre, Espaço mostra uma prévia e Esc sai.
⚠️ Confira o modo ao voltar. Com
claude --continue, ou comclaude --resumee o nome da conversa, ela volta no modo em que estava. Escolhida na lista doclaude --resume, ela começa no modo de uma conversa nova, que no terminal é o modo auto. Toda vez que voltar, confira se aparecemanual mode on. Se não aparecer, aperteShift + Tabaté aparecer.
Dê nome às conversas que vão durar mais de um dia: cada tarefa fica com a sua, e você acha depois. Nomes curtos, sem espaço e sem acento, como formulario ou cores-do-cardapio, são mais fáceis de digitar. E, como na Aula 07, uma tarefa que não tem nada a ver com a anterior merece uma conversa nova.
Duas pegadinhas:
- "Sumiu a minha conversa!" O
claude --continuee a lista olham só a pasta em que você está. Se você abriu o terminal em outra pasta, entre na pasta da página e tente de novo, ou aperteCtrl + Ana lista, para ver as conversas de todas as pastas. - Voltar a uma conversa não volta os arquivos. A conversa traz de volta o que vocês conversaram; a página continua como está agora. Para voltar a página, use as versões guardadas.
Quem decide o envio para o GitHub?
Hoje, as suas versões estão só no seu computador. Na Aula 19, você cria uma conta no GitHub, um site que guarda projetos na internet, e passa a enviar para o GitHub as versões guardadas (o Git chama isso de push). Guardar uma versão não envia nada: enviar é outro passo.
⚠️ No modo auto, o Claude envia para o GitHub sem perguntar, até na linha principal, a
main. A checagem do modo auto deixa esse envio passar por padrão. Hoje, isso não muda nada, porque a sua pasta ainda não está ligada ao GitHub. Mas, quando a página estiver publicada (Aula 19), cada envio para a linha principal muda o site no ar.
A defesa é a da Aula 05: ficar no Manual, onde o envio espera a sua aprovação, e uma regra ask (perguntar), que faz o Claude pedir licença antes de enviar, até no modo auto. Deixe a trava pronta agora. Peça ao Claude:
crie uma regra ask no .claude/settings.json para que você sempre me pergunte antes de enviar para o GitHub (git push)
Como na Aula 05, ele pede licença para mexer na pasta .claude. Aprove. Para conferir, digite /permissions: o painel mostra a regra nova, como Bash(git push *), e de qual arquivo ela veio (Esc fecha o painel). Depois, peça "guarde uma versão com a regra nova", para um desfazer no futuro não levar a trava junto. A Aula 19 confere de novo que ela está lá, antes do primeiro envio.
💡 Por que ask, e não deny? Uma regra deny proibiria o envio de vez, e na Aula 19 você vai querer enviar. A ask deixa enviar, mas só depois do seu sim. Ela pega o envio do jeito como o Claude costuma escrever o comando; escrito de outro jeito, ele pode passar. Por isso, continue lendo cada pedido de comando, como na Aula 05.
Para ir além (opcional): branches, pull requests e várias tarefas
🔧 Para ir além (para quem já programa; pode pular): esta parte mostra o Git como um time de software costuma usar com o Claude: branches (linhas paralelas), pull requests, conflitos, a assinatura do Claude nos commits, mais comandos de sessão e worktrees. Se você nunca programou, pule direto para o Na prática: tudo o que ele pede já foi explicado acima.
Branches e pull requests
Um pull request (pedido para juntar) leva o que foi feito num branch (linha paralela) para o branch principal, com uma revisão antes. Se você usa o GitHub, instale a CLI gh e faça login com gh auth login. O Claude sabe usá-la para abrir pull requests, criar issues e ler comentários. Sem ela, ele ainda consegue usar a API do GitHub, mas sem login os pedidos esbarram com frequência no limite de requisições.
Um caminho comum, passo a passo:
Crie um branch para esta mudança.
Resuma as mudanças que eu fiz no módulo de autenticação.
Crie um PR.
Melhore a descrição do PR com mais contexto sobre as melhorias de segurança.No fluxo da Aula 06, a etapa Guardar vira "Faça o commit com uma mensagem descritiva e abra um PR." O Claude lê o diff e escreve a mensagem no estilo dos commits que o repositório já tem. Regras do time, como o padrão de nome dos branches ou o formato do PR, vão no CLAUDE.md (Aula 11).
Revise o PR gerado antes de enviar e peça para o Claude apontar os riscos da mudança. Para revisar o PR de outra pessoa, use o /code-review 1234 da Aula 09.
Quando o branch atual tem um PR aberto, o rodapé do Claude Code mostra um link clicável, como PR #446, sublinhado com a cor do status: verde (aprovado), amarelo (esperando revisão), vermelho (mudanças pedidas) ou cinza (rascunho). Ele precisa do gh com login.
Conflitos e histórico
Num conflito de merge, diga o resultado que você quer, não quais marcações manter, e peça o raciocínio. Assim o merge fica revisável:
Resolva os conflitos de merge deste branch e explique o que você
manteve de cada lado.Quando a pergunta é por que o código é assim, aponte para o histórico:
Olhe o histórico de commits de src/auth/session.ts e resuma como ele
evoluiu e por quê.O Co-Authored-By no fim do commit
Por padrão, os commits do Claude ganham uma linha no final, Co-Authored-By:, com o nome do modelo usado (como Claude Opus 5.5) e o e-mail noreply@anthropic.com. As descrições de PR ganham um "🤖 Generated with Claude Code". Para trocar esse texto, ou tirá-lo, use a configuração attribution no settings.json:
{
"attribution": {
"commit": "Feito com a ajuda do Claude Code",
"pr": ""
}
}Texto vazio ("") tira a linha. Para tirar a atribuição dos commits e dos PRs de uma vez, use "attribution": false; num arquivo que o time inteiro usa, prefira os textos vazios, porque versões antigas do Claude Code ignoram o arquivo inteiro quando encontram o false. Se você escrever no CLAUDE.md uma regra própria sobre isso, ela vale mais do que essa configuração.
Quem decide o push, por inteiro
No modo auto, por padrão, o Claude faz push em qualquer branch do repositório em que você está trabalhando, inclusive no principal, e abre o pull request que você pediu, sem perguntar. Um branch que não é o principal e tem nome de publicação, como production ou gh-pages, fica fora dessa liberação: a checagem avalia cada push para ele. Continuam bloqueados por padrão o force push, o git reset --hard, o git clean -fd e outras ações que apagam trabalho.
Para conferir antes de cada push e de cada PR, a regra ask fica assim:
{
"permissions": {
"ask": ["Bash(git push *)", "Bash(gh pr create *)"]
}
}O Bash(git push *) também pega o git push sem nada depois, mas não o mesmo push escrito de outro jeito, como git -C . push: é uma trava para o jeito comum de escrever, não uma cerca. As regras valem na ordem deny, depois ask, depois allow.
Sessões, por inteiro
| Comando ou tecla | O que faz |
|---|---|
claude -c e claude -r |
Atalhos de --continue e --resume |
claude -n auth-refactor |
Começa uma sessão já com nome |
Ctrl + R, na lista |
Renomeia a sessão selecionada |
Ctrl + B, na lista |
Mostra só as sessões do branch atual |
Ctrl + W, na lista |
Mostra as sessões de todos os worktrees do repositório |
/, na lista |
Busca. Colar a URL de um PR encontra a sessão que o criou |
claude --from-pr 446 |
Abre a lista só com as sessões ligadas ao PR 446. O Claude liga a sessão ao PR sozinho, quando é ele quem cria o PR |
Uma sessão sem nome ganha um título gerado a partir do primeiro pedido, e aceitar um plano troca esse título por um baseado no plano. A guarda de 30 dias muda com a configuração cleanupPeriodDays.
💡 Dica da documentação: dê nome às sessões com
/renamee trate-as como branches. Cada frente de trabalho ganha o seu próprio contexto, que fica.
Para tentar outro caminho sem perder a conversa como está, o /branch cria uma cópia a partir deste ponto e muda você para ela. A original continua na lista do /resume:
/branch tentar-com-streamingNa linha de comando, claude --continue --fork-session faz o mesmo com a conversa mais recente.
⚠️ Cuidado com os nomes: o
/branchramifica a conversa, não cria um branch do Git. E trocar de branch no Git não troca a conversa: o Claude passa a ver os arquivos do branch novo, mas o histórico da conversa continua o mesmo. Já o/forkcopia a conversa para uma sessão nova, em segundo plano (Aula 20), e não tem nada a ver com o fork do GitHub.
Worktrees: várias tarefas ao mesmo tempo
Um worktree é uma segunda pasta de trabalho do mesmo repositório, com os seus próprios arquivos e o seu próprio branch, mas com o mesmo histórico. Como cada sessão do Claude é ligada a uma pasta, worktrees deixam duas ou mais sessões trabalharem ao mesmo tempo sem uma pisar nos arquivos da outra.
claude --worktree login-social # terminal 1
claude --worktree corrige-bug-123 # terminal 2Cada um cria a pasta .claude/worktrees/<nome>/ num branch novo chamado worktree-<nome>, e abre uma sessão lá dentro. O atalho é -w.
O que saber antes de usar:
- O repositório precisa ter pelo menos um commit, e a pasta precisa ser confiável: rode
claudeuma vez nela antes. - O worktree parte do branch principal do repositório remoto (em geral, o
main), não do branch em que você está. Commits locais que ainda não estão lá não aparecem no worktree, a menos que você configureworktree.baseRefcomo"head". Sem repositório remoto, ele parte do commit em que você está. - É uma pasta nova em folha: sem
node_modulese sem.env. Peça para o Claude instalar as dependências e, para copiar arquivos ignorados pelo Git, liste-os num arquivo.worktreeincludena raiz (por exemplo, uma linha com.env). - Adicione
.claude/worktrees/ao.gitignore. - Ao sair, se houver trabalho no worktree, o Claude Code pergunta se você quer manter ou remover, e remover apaga a pasta, o branch e tudo o que foi feito neles. Um worktree sem mudanças, numa sessão sem nome, é apagado sozinho.
- Para revisar um PR numa pasta separada:
claude --worktree "#1234", com aspas.
No app desktop, o equivalente é ligar a opção Worktree antes de começar a sessão (a versão Desktop desta aula mostra onde).
Na prática
Use a pasta da sua página (a confeitaria, ou a da sua ideia).
- Abra o terminal, entre na pasta e abra o Claude Code:
cd Documents/confeitaria, com o nome da sua pasta, e depoisclaude. AperteShift + Tabuma vez e confira se aparecemanual mode on. - Dê um nome à conversa:
/rename versoes. - Peça: "me mostre as versões guardadas, da mais nova para a mais velha, em português simples". Depois: "o que mudou entre a primeira e a última?".
- Peça: "tem alguma mudança que ainda não foi guardada numa versão?". Se tiver, guarde uma versão antes.
- Peça: "deixe o texto de boas-vindas em amarelo-claro" e aprove. Abra a página no navegador, no modo claro, tire um print, cole na caixa de texto e pergunte: "dá para ler o texto de boas-vindas?".
- Peça: "desfaça as mudanças desde a última versão guardada". Quando o pedido do comando aparecer, desça até No, aperte
Tabe peça a explicação em português simples. Se fizer sentido, aprove com Yes. Atualize a página e confira: o texto de boas-vindas voltou a ser fácil de ler. - Peça: "crie uma regra ask no .claude/settings.json para que você sempre me pergunte antes de enviar para o GitHub (git push)". Aprove, digite
/permissionse encontre a regra nova (Escfecha o painel). Depois, peça: "guarde uma versão com a regra nova". - Saia com
/exit. No terminal, rodeclaude --resume versoes, confira se aparecemanual mode one peça: "resuma o que a gente fez nesta conversa".
Resumo
- Peça as versões em português: o histórico mostra cada versão guardada, da mais nova para a mais velha, e o Claude compara duas delas. Os comandos que só olham rodam sem pedir licença.
- Errou? "Desfaça as mudanças desde a última versão guardada" joga fora o que ainda não foi guardado e devolve a página ao jeito da última versão. Peça a explicação do comando antes de aprovar.
- Para um arquivo voltar como estava numa versão antiga, peça "sem apagar nenhuma versão guardada" e guarde uma versão nova depois: o histórico ganha uma versão e não perde nenhuma.
- O
/rewindvolta pontos da conversa, só no que o Claude mudou; a versão guardada vale para a pasta inteira e não some. claude --continuereabre a conversa mais recente da pasta,claude --resumee/resumemostram a lista, e/renamedá nome. Ao voltar, confira omanual mode on.- No modo auto, o Claude envia para o GitHub sem perguntar, até na linha principal. A regra ask para o
git pushjá fica pronta para a Aula 19.
No próximo módulo, você escreve as regras da casa: o CLAUDE.md, um arquivo que o Claude lê no começo de toda conversa, para você não precisar repetir o que já combinou.
Perguntas de fixação
Três perguntas rápidas para conferir se a ideia principal da aula ficou. Escolha uma opção: a página mostra se você acertou e explica a resposta.
Você fez uma mudança boa no cardápio e não guardou uma versão. Depois, pediu o texto de boas-vindas em amarelo-claro. Se você pedir "desfaça as mudanças desde a última versão guardada", o que acontece?
Ver a resposta
Resposta: a) Desfazer até a última versão guardada joga fora tudo o que ainda não foi guardado, não só o erro: a mudança boa vai junto. As versões guardadas não mudam. Por isso, confira antes se há algo sem guardar, e guarde uma versão sempre que algo funcionar (Aula 10).
Ontem você deu o nome formulario a uma conversa, com /rename formulario. Hoje, como voltar direto a ela?
Ver a resposta
Resposta: c) Com o nome, o claude --resume volta direto para a conversa. Ele procura o nome na pasta em que você está, então rode o comando na pasta da página. O /rename só dá nome, o claude --continue reabre a conversa mais recente, e voltar a uma conversa não volta os arquivos. Ao voltar, confira o modo (Aula 10).
Para o envio para o GitHub (git push), você criou uma regra ask, e não uma regra deny. Por quê?
Ver a resposta
Resposta: a) A ask faz o Claude pedir licença antes de enviar, até no modo auto, e a Aula 19 precisa do envio. Uma deny também valeria no modo auto, e serve para comandos, não só para arquivos, mas proibiria o envio de vez (Aula 10).