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 app Claude Desktop11 min de estudo
Prefere o terminal? Veja esta aula na versão do terminal
Inscreva-se no canalOs vídeos da versão do app vão para o canal da BrazLabs no YouTube.

🖥️ Versão Desktop. Nesta versão do curso, você usa o Claude Code no app Claude Desktop, na aba Code. Quase tudo é feito por janelas e botões. Quando uma aula pedir para digitar um comando, ela mostra exatamente o que digitar. Nesta aula, você não digita nenhum comando: os do Git aparecem nos pedidos de aprovação, e você aprova ou recusa, como na Aula 05. A parte opcional do fim usa o terminal integrado do app, para o login do gh.

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
  • Por que a conversa não substitui as versões guardadas
  • Retomar uma conversa pela barra lateral e dar nome a ela
  • 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. Aceite a mudança no diff. Depois, abra a página no modo claro: no navegador, ou clicando no caminho do index.html na conversa, que abre a página no painel Browser (navegador) do app, como na Aula 06. Tire um print, arraste para a caixa de mensagem e pergunte: "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 ele espera a sua aprovação, e a conversa mostra o comando, algo como git restore index.html. É uma boa hora para praticar a Aula 05: recuse e escreva na caixa de mensagem "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? Escreva "pode rodar" e aprove quando o pedido aparecer de novo.

Abra a página de novo: 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ê.

A conversa não é o histórico da página

Na Aula 09, você viu que, no Manual, dá para recusar uma mudança antes de ela chegar aos arquivos. Depois que ela chegou, o caminho de volta é uma versão guardada. A conversa continua na barra lateral, mas ela não guarda a página de antes: voltar a uma conversa traz o que vocês conversaram, não os arquivos daquele dia.

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 como uma sessão, na barra lateral da aba Code. Fechou o app no meio de uma tarefa? No dia seguinte, dá para voltar à mesma conversa, com tudo o que vocês combinaram. O app guarda as conversas sem prazo para apagar.

No app O que faz
Clicar numa sessão da barra lateral Volta para aquela conversa, de onde ela parou
+ New (nova sessão), na barra lateral, ou Cmd + N no Mac (Ctrl + N no Windows) Começa uma conversa nova
Clicar no título da sessão, na barra do topo dela Dá um nome à sessão

⚠️ Confira o modo ao voltar. Antes de pedir qualquer coisa numa sessão que você retomou, confira se o seletor de modo mostra Manual.

Dê nome às conversas que vão durar mais de um dia: cada tarefa fica com a sua, e você acha depois na barra lateral. E, como na Aula 07, uma tarefa que não tem nada a ver com a anterior merece uma sessão nova.

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. Aceite. Para conferir, clique no caminho do arquivo na conversa: ele abre no painel de arquivos do app, e a regra nova aparece na lista ask, como Bash(git push *), perto da regra deny do .env. 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 recursos de sessão e worktrees. Ela usa o terminal integrado do app para o login do gh. 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 ferramenta de linha de comando gh e faça login com gh auth login, que você pode rodar no terminal integrado do app (Ctrl + `, ou Terminal, na barra do topo da sessão). Se o gh ainda não estiver instalado, o app oferece a instalação na primeira vez que você tentar criar um PR. O Claude sabe usar o gh para abrir pull requests, criar issues e ler comentários. Sem ele, o Claude 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.

Depois que você abre um pull request, ele aparece no cartão Changes (mudanças) do painel de detalhes da sessão, com o resultado dos checks de CI. No menu ⋮, ao lado do título dele, ficam duas opções:

  • Auto-fix (corrigir sozinho): o Claude tenta corrigir sozinho os checks que falharem. Numa sessão local, ele também atende aos comentários de revisão novos deixados por outra pessoa, quando ela é a dona do repositório, membro da organização, colaboradora ou um GitHub App.
  • Merge when ready (juntar quando estiver pronto): liga o merge automático do GitHub para o PR, que acontece quando os checks passarem. Numa sessão local, o app pede um merge no modo squash. Antes, ligue o merge automático nas configurações do repositório no GitHub; sem isso, a opção não liga.

No layout anterior do app, as duas opções ficam no botão CI, na barra de status da sessão. Esse acompanhamento precisa do gh instalado e 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 (o app lê os mesmos arquivos de configuração que o terminal):

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. O app lê esse arquivo, e a regra vale até no modo Auto:

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

  • Trocar e comparar: Ctrl + Tab e Ctrl + Shift + Tab passam para a sessão seguinte ou para a anterior da barra lateral. Para ver duas sessões lado a lado, segure Cmd (Mac) ou Ctrl (Windows) e clique numa sessão da barra lateral; Cmd + \ (ou Ctrl + \) fecha o painel em foco.
  • Agrupar e achar: passe o mouse sobre um título da lista de sessões e clique no ícone Group and sort (agrupar e ordenar). As sessões arquivadas ficam em View all (ver todas), a última linha desse menu, na aba Archived (arquivadas). No layout anterior do app, o ícone é o Filter (filtro), que aparece sem passar o mouse.
  • Pedir ao Claude: você também pode pedir, com suas palavras, para ele renomear ou arquivar uma sessão. Antes de arquivar, ele pede a sua confirmação, menos nos modos Auto e Bypass permissions, em que pode arquivar direto. Para ser perguntado sempre, use o Manual.
  • Sessões do terminal: digite /resume na caixa de mensagem para listar as sessões que você começou no terminal, neste computador, e continuar no app. Feche a sessão no terminal antes. O comando funciona em sessões locais, e o app continua a mesma sessão, não uma cópia. O claude --continue, o claude --resume e os outros comandos claude são da versão terminal.
  • Uma pergunta de lado: o chat lateral (Cmd + ; no Mac, Ctrl + ; no Windows, ou /btw), da Aula 07, lê a conversa até ali e não devolve nada para ela.
  • Prazo: para dar um limite de idade às conversas do app, use a configuração desktopSessionCleanupPeriodDays.

💡 Dica da documentação: dê nome às sessões e trate-as como branches. Cada frente de trabalho ganha o seu próprio contexto, que fica. 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.

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.

No app, num repositório Git, ligue a opção Worktree antes de começar a sessão: clique no controle da pasta do projeto, na linha embaixo da caixa de mensagem, e ligue Worktree. No layout anterior do app, marque a caixa worktree ao lado do nome do branch, acima da caixa de mensagem. A sessão ganha uma cópia isolada do projeto, guardada por padrão em .claude/worktrees/, dentro da raiz do projeto. Abra uma sessão assim para cada tarefa, e elas trabalham em paralelo. O claude --worktree é da versão terminal.

O que saber antes de usar:

  • O app precisa do Git para isolar as sessões, e o repositório precisa ter pelo menos um commit.
  • É 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). Ele vale também para as sessões do app.
  • Adicione .claude/worktrees/ ao .gitignore.
  • Pasta e nome dos branches: em Settings (configurações) → Claude Code, a opção Worktree location (local dos worktrees) muda a pasta dos worktrees das sessões locais, e o Branch prefix (prefixo dos branches) põe um prefixo no nome de todo branch de worktree, bom para separar os branches criados pelo Claude.
  • Ao terminar, arquive com cuidado. Passe o mouse sobre a sessão na barra lateral, abra o menu dela e escolha Archive (arquivar). ⚠️ Arquivar pode perder o que não virou commit. Se o app perguntar sobre as mudanças, Archive anyway (arquivar mesmo assim) joga fora; cancele e faça o commit antes. Se as únicas mudanças forem arquivos novos, faça o commit dos que você quer manter antes que o PR aberto nessa sessão seja juntado, porque o app pode apagá-los sem perguntar. Nos outros casos, o worktree fica no disco com as mudanças, e o app apaga os dois cerca de 30 dias depois; para recuperar, abra a sessão na aba Archived e escolha Unarchive (desarquivar).
  • Arquivar sozinho: para as sessões se arquivarem quando o PR for juntado ou fechado, ligue Auto-archive after PR merge or close (arquivar sozinho quando o PR for juntado ou fechado) em Settings → Claude Code. Sessões na nuvem e sessões que ainda estão rodando não se arquivam sozinhas.
  • O Claude também sugere sessões: quando ele nota algo que vale corrigir, mas está fora do escopo da tarefa, oferece esse trabalho num task chip (um botão de tarefa) na conversa. Um clique abre o trabalho numa sessão nova, com o seu próprio worktree, e a sessão atual continua.

Na prática

Use a pasta da sua página (a confeitaria, ou a da sua ideia).

  1. Na aba Code, na linha abaixo da caixa de mensagem, escolha Local e a pasta da sua página. Antes da primeira mensagem, escolha Manual no seletor de modo, na mesma linha.
  2. 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?".
  3. Peça: "tem alguma mudança que ainda não foi guardada numa versão?". Se tiver, guarde uma versão antes.
  4. Peça: "deixe o texto de boas-vindas em amarelo-claro" e aceite a mudança. Abra a página no modo claro, tire um print, arraste para a caixa de mensagem e pergunte: "dá para ler o texto de boas-vindas?".
  5. Peça: "desfaça as mudanças desde a última versão guardada". Quando o comando esperar a sua aprovação, recuse e peça a explicação em português simples, na caixa de mensagem. Se fizer sentido, escreva "pode rodar" e aprove. Abra a página de novo e confira: o texto de boas-vindas voltou a ser fácil de ler.
  6. Peça: "crie uma regra ask no .claude/settings.json para que você sempre me pergunte antes de enviar para o GitHub (git push)". Aceite. Depois, clique no caminho do arquivo na conversa e veja a regra no painel de arquivos. Por fim, peça: "guarde uma versão com a regra nova".
  7. Dê um nome à sessão: clique no título dela, na barra do topo, e escreva versoes.
  8. Feche o app e abra de novo. Na barra lateral, clique na sessão versoes, confira se o seletor mostra Manual 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.
  • A conversa fica na barra lateral, mas não guarda a página de antes: o ponto de volta é a versão guardada.
  • As sessões ficam na barra lateral: clique numa para retomar e clique no título para dar nome. Ao voltar, confira o Manual no seletor de modo.
  • 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, Desktop).

Pergunta 2 de 3

Ontem você deu o nome versoes a uma sessão. Hoje, como continuar aquela conversa no app?

Ver a resposta

Resposta: c) As sessões ficam na barra lateral, e um clique numa delas retoma a conversa de onde ela parou. Clicar no título só dá nome à sessão aberta, o + New começa uma conversa nova, e voltar a uma conversa não volta os arquivos. Ao voltar, confira o Manual no seletor de modo (Aula 10, Desktop).

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: d) 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, Desktop).