removendo mudanças
checkout é um comando multiuso no git. o mais comum, é claro, é alternar ramos, mas também pode ser usado para ‘redefinir’ as alterações de volta ao estado do arquivo no HEAD. portanto, se quiser redefinir o arquivo para o último estado de versão, você pode fazer:
git checkout myfile
e todas as suas alterações desapareceram.
obter uma versão anterior de um arquivo
Mas você também pode usar checkout para retirar um arquivo de um commit anterior no branch atual.
git checkout production myfile
verifica meu arquivo do HEAD do branch de produção e o adiciona ao índice (também conhecido como já ‘adicionado’).
Melhor que :/console
Uma das estratégias menos conhecidas e acho que realmente úteis é usar o sinalizador -p para fazer check-out ou preparar apenas partes dos arquivos que interessam a você. Primeiro, deixe-me dar um exemplo de como eu uso isso antes de cometer.
Digamos que você acabou de passar uma hora rastreando um problema estranho em javascript e está usando console.log
instruções para inspecionar o estado ao longo do caminho. A correção real é apenas duas linhas separadas de código, mas você adicionou outras 10 instruções de depuração à base do código que obviamente não deseja confirmar. Você pode usar o sinalizador -p para remover as instruções de log antes de adicionar os arquivos ao índice. Acho isso mais rápido e conveniente do que pesquisar as declarações em meu editor de texto.
git checkout -p myfile.js
fornecerá um prompt interativo que perguntará, um pedaço de cada vez, se você deseja adicionar esse pedaço. Se o pedaço for muito largo, pressione ‘s’ e ele irá dividir o pedaço em seções menores. Dizer sim (‘y’) removerá a alteração, não a manterá.
- console.log "I'm a real boy"
+ console.log "I'm not a real boy"
Apply this hunk to index and worktree [y,n,q,a,d,/,e,?]?
Como alternativa, se você quiser manter as instruções de log (talvez você não tenha concluído a depuração, mas encontrou algo que vale a pena confirmar), você pode usar:
git add -p myfile.js
para preparar apenas as seções que deseja indexar e deixar suas instruções de console não confirmadas, mas ainda no código. Essa ideia é a que mais me leva a pensar, mas é realmente muito útil no dia a dia, uma vez que você entenda como funciona o índice.
Arco-íris Duplo
A estratégia a seguir é a base para eu escrever esta dica hoje porque é a primeira vez que a uso neste contexto. Digamos que você alterou um arquivo e fez um commit e precisa reverter algumas alterações, mas manter outras de um commit anterior, neste caso 6fb7e99:
git checkout -p 6fb7e99 myfile
traz um prompt interativo que permitirá que você adicione apenas alguns pedaços do arquivo anterior diretamente ao índice. Dizer sim reverte a alteração, dizer não mantém a alteração como você a tem no arquivo existente. Assim que terminar de reverter suas alterações, seu arquivo já estará no índice e pronto para:
git commit -m "reverted some changes"