Introdução
O DAYLIGHT CAFE está corrigindo o preço do seu flat white. A atualização do preço e uma versão correspondente do cardápio para download já estão preparadas. Um anúncio sazonal inacabado está misturado no mesmo arquivo do cardápio, e as anotações particulares de degustação devem ficar fora do commit público.
Você escolherá exatamente o que incluir em um único commit do Git, preservando o restante do trabalho. É necessário saber navegar pelo terminal e ter familiaridade básica com arquivos de texto. A árvore de trabalho, a área de preparação e os snapshots de commits do Git são explicados aqui; não é necessário programar sites nem ter uma conta no GitHub.
Use Workspace para executar comandos, Working Copy para ver os arquivos em edição e Committed Menu para ver os arquivos exatos armazenados no commit atual. As duas páginas leem conteúdo real e nunca preenchem arquivos ausentes. O café, a ilustração e o cardápio são materiais de treinamento originais. Os rótulos da interface e a saída durante a execução permanecem em inglês.
Leia as Duas Versões do Cardápio
Nesta etapa, você comparará o cardápio público com os arquivos de trabalho preparados e configurará uma identidade de autor local ao repositório.
Abra Committed Menu. O flat white custa EUR 3.80, e o quadro sazonal informa que as bebidas estão sendo planejadas. Use Download takeaway menu para abrir o arquivo de texto real disponível para download. Ele também mostra EUR 3.80.
Mude para Working Copy. O flat white agora custa EUR 4.20, mas o quadro sazonal também contém um anúncio de degustação privada. Apenas a correção do preço foi aprovada. Os dois arquivos públicos do cardápio devem indicar EUR 4.20; o rascunho sazonal e tasting-notes.txt devem permanecer na sua máquina, fora do commit.
A Working Copy mantém o anúncio sazonal inacabado visível:

Mude para Workspace. Ele abre em /home/labex/project/daylight-menu, o repositório Git preparado. Use pwd para exibir seu diretório atual:
pwd
Se você navegou para outro local, volte usando o caminho completo:
cd /home/labex/project/daylight-menu
Um repositório armazena os snapshots e o histórico de um projeto. A árvore de trabalho é o conjunto de arquivos que você pode editar. git status --short resume como esses arquivos diferem do último commit e da área de preparação. --short solicita uma exibição compacta:
git status --short
Você deverá ver menu.txt e menu-download.txt modificados, além de ?? tasting-notes.txt. ?? significa que as anotações não são rastreadas: o Git ainda não as adicionou a um snapshot. Um arquivo modificado não é incluído automaticamente em um commit.
O Git registra um nome de autor e um e-mail em cada commit. git config --local salva uma configuração apenas dentro deste repositório. As aspas mantêm as duas palavras do nome juntas. Use esta identidade fictícia de treinamento:
git config --local user.name "Alex Morgan"
git config --local user.email "alex@example.test"
Leia os valores configurados:
git config --local user.name
git config --local user.email
Os valores esperados são Alex Morgan e alex@example.test. Nenhuma identidade global do Git ou conta externa é alterada. Todos os comandos seguintes deste laboratório devem ser executados neste mesmo repositório.
Prepare Apenas o Hunk do Preço Aprovado
Nesta etapa, você colocará a correção aprovada do preço na área de preparação sem incluir o rascunho sazonal.
Permaneça em Workspace. Um commit é um snapshot armazenado. HEAD identifica o commit atual. A área de preparação, também chamada de índice, contém o snapshot exato que o próximo commit registrará. Preparar alterações copia o conteúdo selecionado para o índice; isso não exclui as outras alterações de trabalho.
--no-pager é uma opção do Git que exibe a saída diretamente em vez de abrir um visualizador interativo. Use-a nas comparações abaixo. Se um comando anterior do Git já abriu um visualizador que mostra (END), pressione q para voltar ao shell; não digite o próximo comando nesse visualizador.
git --no-pager diff compara a árvore de trabalho com o índice. O separador -- indica que o argumento seguinte é um nome de arquivo, e não uma opção do Git:
git --no-pager diff -- menu.txt
Procure dois grupos de alterações, chamados hunks. Uma linha que começa com - é o conteúdo anterior; uma que começa com + é o conteúdo proposto. O primeiro hunk altera o preço do flat white de 3.80 para 4.20. O segundo altera o anúncio sazonal. A linha @@ identifica a localização de cada hunk, não o conteúdo do cardápio.
git add --patch pergunta quais hunks devem ser copiados para o índice. Ele altera o snapshot preparado e mantém o arquivo de trabalho completo intacto:
git add --patch menu.txt
No hunk do preço do flat white, digite y e pressione Enter para prepará-lo. No hunk do quadro sazonal, digite n e pressione Enter para deixá-lo fora da área de preparação. Leia o texto exibido antes de cada resposta; y significa sim e n significa não.
Agora inspecione a diferença realmente preparada. --cached seleciona a comparação entre HEAD e o índice:
git --no-pager diff --cached -- menu.txt
Apenas a correção do preço deve aparecer. Compare-a com o que ainda não foi preparado:
git --no-pager diff -- menu.txt
Apenas o anúncio sazonal deve aparecer aqui. Nada foi registrado em um commit ainda.
Se você selecionou o hunk errado, use git restore --staged para restaurar a entrada deste arquivo no índice a partir de HEAD. --staged atua apenas no índice, portanto a correção do preço e o rascunho permanecem no arquivo de trabalho:
git restore --staged menu.txt
Depois, repita git add --patch menu.txt, escolha o hunk do preço e inspecione as duas diferenças novamente. Essa recuperação é segura antes do commit porque não descarta seus arquivos de trabalho.
Inclua o Download Correspondente do Cardápio
Nesta etapa, você tornará o próximo commit completo por si só, adicionando o download correspondente e revisando cada arquivo preparado.
Permaneça em Workspace. O café oferece uma página e um cardápio para levar. Publicar apenas uma das correções deixaria dois preços diferentes. cat exibe um arquivo de texto pequeno:
cat menu-download.txt
Ele já contém Flat white: EUR 4.20. Este arquivo contém apenas a correção aprovada, portanto prepare o arquivo inteiro:
git add menu-download.txt
O comando simples git add prepara o arquivo especificado. Evite preparar o diretório inteiro: ele também contém anotações particulares e o anúncio inacabado.
--name-only lista os caminhos de uma diferença sem exibir seu conteúdo. Revise os caminhos preparados:
git --no-pager diff --cached --name-only
A lista deve conter apenas menu-download.txt e menu.txt. Depois, revise a diferença completa preparada desses arquivos:
git --no-pager diff --cached
As duas versões públicas devem indicar 4.20. O anúncio sazonal e as anotações de degustação não devem aparecer.
Para ler um arquivo preparado completo em vez de uma diferença, use git --no-pager show com :menu.txt. Os dois-pontos iniciais selecionam a entrada do índice:
git --no-pager show :menu.txt
O cardápio preparado combina EUR 4.20 com o texto sazonal original, Seasonal drinks are being planned. Essa combinação demonstra que o índice pode ser diferente da árvore de trabalho.
Se você preparou as anotações particulares por engano, retire-as da área de preparação sem excluir o arquivo:
git restore --staged tasting-notes.txt
Execute essa recuperação apenas quando as anotações tiverem sido preparadas; caso contrário, o Git poderá informar corretamente que o caminho não rastreado é desconhecido. Inspecione git --no-pager diff --cached novamente antes de continuar. Um nome de arquivo digitado incorretamente não altera nada: use git status --short para encontrar o nome real e repita o comando pretendido.
Crie o Commit e Leia o Resultado Público Real
Nesta etapa, você registrará um commit com um único objetivo e comprovará que o trabalho inacabado continua disponível depois disso.
Permaneça em Workspace. git commit registra o índice completo como um novo snapshot. -m fornece sua mensagem explicativa curta; as aspas mantêm essa mensagem como um único argumento:
git commit -m "Correct the flat white price"
O Git informa um novo commit e dois arquivos alterados. Seu hash varia. A mensagem descreve o trabalho, mas o que importa é o conteúdo real do snapshot.
git --no-pager show pode ler um arquivo diretamente de um commit. HEAD:menu.txt significa o arquivo chamado menu.txt armazenado no commit atual:
git --no-pager show HEAD:menu.txt
git --no-pager show HEAD:menu-download.txt
Ambos mostram o preço aprovado de 4.20. O anúncio sazonal registrado no commit ainda informa que as bebidas estão sendo planejadas.
Confira o trabalho restante:
git status --short
A saída esperada contém M menu.txt e ?? tasting-notes.txt. As duas colunas de status distinguem as alterações preparadas, à esquerda, das alterações de trabalho não preparadas, à direita. O M na segunda coluna significa que o rascunho sazonal permanece fora da área de preparação. As anotações continuam não rastreadas. Um status vazio estaria errado nesta tarefa: significaria que o trabalho inacabado que deveria ser preservado desapareceu ou entrou em um commit.
Leia a diferença restante e as anotações:
git --no-pager diff -- menu.txt
cat tasting-notes.txt
Mude para Committed Menu e atualize a página. Confirme que o flat white custa EUR 4.20 e que o quadro sazonal mantém seu texto público original. Baixe o cardápio para levar novamente e confirme o mesmo preço no arquivo real. Mude para Working Copy: o rascunho da degustação privada continua visível ali.
O cardápio registrado no commit mostra o preço aprovado e o anúncio sazonal público original:

Agora você tem uma correção pública completa, enquanto o trabalho não relacionado permanece intacto. Não é necessário fazer push; este projeto ensina os limites de commits locais. A colaboração remota pertence a outro projeto.
Resumo
Você distinguiu os arquivos de trabalho do índice e de um commit, selecionou um hunk, incluiu um download correspondente e verificou o cardápio realmente registrado no commit. O rascunho sazonal e as anotações particulares permaneceram fora do commit. Um commit útil contém a alteração pretendida completa, não todos os arquivos que por acaso foram modificados.



