git restore

Snapshots básicos

Restaura arquivos no diretório de trabalho ou na área de preparação


O comando 'git restore' volta arquivos a uma versão conhecida. Por padrão, sobrescreve um arquivo de trabalho com sua versão preparada, descartando suas edições. Com --staged, tira um arquivo da área de preparação e mantém suas edições no disco. Com --source, você recupera um arquivo como era em qualquer commit. Foi adicionado no Git 2.23 para assumir a parte do git checkout que restaura arquivos.

Sinopse

git restore [<options>] [--source=<tree>] [--staged] [--worktree] [--] <pathspec>...
[ ] opcional| ou<arg> valor a substituir... repetível--flag opção

Opções

Clique em uma opção para expandir

Iniciante (2)

Restaura a área de preparação: tira o arquivo da preparação. Seu arquivo de trabalho não é tocado.

RecomendadoO jeito seguro de tirar da preparação: suas edições ficam no disco

Exemplo

git restore --staged app.js

Restaura o diretório de trabalho (o padrão). Junto com --staged, os dois são restaurados.

Quando necessárioAlvo padrão; combine com --staged para redefinir os dois

Exemplo

git restore --staged --worktree app.js

Intermediário (2)

Pega o arquivo do commit, branch ou tag indicado em vez da área de preparação.

RecomendadoRecuperar um arquivo de qualquer commit sem mover o branch

Exemplo

git restore --source=HEAD~1 app.js

Escolha trechos (hunks) de forma interativa: o git pergunta sobre cada alteração.

Quando necessárioDescartar trechos escolhidos e manter o resto

Exemplo

git restore -p app.js

Escolhendo a opção certa

restore versus comandos antigos

As mesmas ações, antigas e novas

ComandoEquivalente antigoEfeito
git restore app.jsgit checkout -- app.jsDescartar edições não preparadas
git restore --staged app.jsgit reset app.jsTirar da preparação, manter edições
git restore --source=HEAD~1 app.jsgit checkout HEAD~1 -- app.jsArquivo de um commit antigo

Exemplos

Descartar edições

git restore app.js

Descarta as alterações não preparadas de app.js.


Tirar um arquivo da preparação

git restore --staged app.js

Tira app.js da área de preparação e mantém as edições.


Arquivo de um commit antigo

git restore --source=HEAD~2 app.js

Recupera app.js como era dois commits atrás.

Exemplos de fluxos de trabalho

1
git add .

Tudo está preparado

2
git restore --staged README.md

README.md sai da preparação

3
git commit -m "Add to cart"

O commit deixa README.md de fora

Solução de problemas

error: pathspec 'x' did not match any file(s) known to git

Causa: O arquivo não é rastreado ou o caminho está errado

Confira o caminho com git status; restore só funciona em arquivos rastreados

Restaurei um arquivo e perdi minhas edições

Causa: git restore sobrescreve o arquivo de trabalho

Edições não salvas foram perdidas; o histórico de desfazer do seu editor talvez ainda as tenha. Da próxima vez, faça git stash antes

Dicas e armadilhas

Boas práticas

  • ✓Execute git diff antes de git restore para ver o que você vai descartar.
  • ✓Use git restore --staged para tirar da preparação — ele nunca mexe nas suas edições.
  • ✓Prefira git restore a git checkout para arquivos: o nome diz o que ele faz.

Erros comuns

  • ✗Executar git restore <file> em edições que você queria manter — edições descartadas não podem ser recuperadas.
  • ✗Esperar que git restore --staged descarte sua edição: ele só tira da preparação.
  • ✗Usar git restore para desfazer um commit — ele restaura arquivos; para commits use git reset ou git revert.

Perguntas frequentes

A:

git restore altera arquivos. git reset move o branch para outro commit (e também pode redefinir arquivos).

A:

Não para edições de trabalho descartadas: o Git nunca as guardou. Tirar da preparação com --staged não perde nada.

A:

Git 2.23 ou mais recente. Em versões antigas use git checkout -- <file> e git reset <file>.