BrazLabsLaboratório de Soluções DigitaisCursos e infoprodutos
Claude Code na Prática Todas as aulas
Módulo 3 · Fluxos do dia a dia

Aula 10Git no dia a dia: versões e sessões

versão do terminal12 min de estudo
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 app

Objetivos

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 /rewind e uma versão guardada
  • Retomar uma conversa e dar nome a ela, com claude --continue, claude --resume, /resume e /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:

texto
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.html depois 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 com claude --resume e o nome da conversa, ela volta no modo em que estava. Escolhida na lista do claude --resume, ela começa no modo de uma conversa nova, que no terminal é o modo auto. Toda vez que voltar, confira se aparece manual mode on. Se não aparecer, aperte Shift + Tab até 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 --continue e 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 aperte Ctrl + A na 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:

texto
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:

texto
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:

texto
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:

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:

JSON
{
  "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 /rename e 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:

texto
/branch tentar-com-streaming

Na linha de comando, claude --continue --fork-session faz o mesmo com a conversa mais recente.

⚠️ Cuidado com os nomes: o /branch ramifica 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 /fork copia 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.

terminal
claude --worktree login-social      # terminal 1
claude --worktree corrige-bug-123   # terminal 2

Cada 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 claude uma 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ê configure worktree.baseRef como "head". Sem repositório remoto, ele parte do commit em que você está.
  • É uma pasta nova em folha: sem node_modules e sem .env. Peça para o Claude instalar as dependências e, para copiar arquivos ignorados pelo Git, liste-os num arquivo .worktreeinclude na 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).

  1. Abra o terminal, entre na pasta e abra o Claude Code: cd Documents/confeitaria, com o nome da sua pasta, e depois claude. Aperte Shift + Tab uma vez e confira se aparece manual mode on.
  2. Dê um nome à conversa: /rename versoes.
  3. 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?".
  4. Peça: "tem alguma mudança que ainda não foi guardada numa versão?". Se tiver, guarde uma versão antes.
  5. 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?".
  6. Peça: "desfaça as mudanças desde a última versão guardada". Quando o pedido do comando aparecer, desça até No, aperte Tab e 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.
  7. 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 /permissions e encontre a regra nova (Esc fecha o painel). Depois, peça: "guarde uma versão com a regra nova".
  8. Saia com /exit. No terminal, rode claude --resume versoes, confira se aparece manual mode on e 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 /rewind volta pontos da conversa, só no que o Claude mudou; a versão guardada vale para a pasta inteira e não some.
  • claude --continue reabre a conversa mais recente da pasta, claude --resume e /resume mostram a lista, e /rename dá nome. Ao voltar, confira o manual mode on.
  • No modo auto, o Claude envia para o GitHub sem perguntar, até na linha principal. A regra ask para o git push já 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.

Pergunta 1 de 3

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).

Pergunta 2 de 3

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).

Pergunta 3 de 3

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).