Pergunta

Essa pergunta já tem resposta aqui:

Eu sei que o Git rastreia as alterações que faço no meu aplicativo e as mantém até que eu confirme as alterações, mas é aqui que estou travado:

Quando quero reverter para um commit anterior eu uso:

git reset --hard HEAD

E o Git retorna:

HEAD is now at 820f417 micro

Como faço para reverter os arquivos do meu disco rígido para o commit anterior?

Meus próximos passos foram:

git add .
git commit -m "revert"

Mas nenhum dos arquivos foi alterado no meu disco rígido...

O que estou fazendo certo/errado?

Foi útil?

Solução

Primeiro, é sempre importante notar que git reset --hard é um comando potencialmente perigoso, pois descarta todas as suas alterações não confirmadas.Por segurança, você deve sempre verificar se a saída do git status está limpo (ou seja, vazio) antes de usá-lo.

Inicialmente você diz o seguinte:

Então, eu sei que o Git rastreia as alterações que faço no meu aplicativo e as mantém até que eu confirme as alterações, mas é aqui que estou paralisado:

Isso está incorreto.O Git apenas registra o estado dos arquivos quando você os prepara (com git add) ou quando você cria um commit.Depois de criar um commit que tenha seus arquivos de projeto em um estado específico, eles estarão muito seguros, mas até então o Git não estará realmente "rastreando alterações" em seus arquivos.(por exemplo, mesmo que você faça git add para preparar uma nova versão do arquivo, que substitui a versão previamente preparada desse arquivo na área de teste.)

Na sua pergunta, você pergunta o seguinte:

Quando quero reverter para um commit anterior eu uso:git reset --hard HEAD E git retorna:HEAD está agora em 820f417 micro

Como faço para reverter os arquivos do meu disco rígido para o commit anterior?

Se você fizer git reset --hard <SOME-COMMIT> então o Git irá:

  • Faça seu branch atual (normalmente master) de volta ao ponto em <SOME-COMMIT>.
  • Em seguida, faça com que os arquivos em sua árvore de trabalho e o índice ("área de teste") sejam iguais às versões confirmadas em <SOME-COMMIT>.

HEAD aponta para o seu branch atual (ou commit atual), então tudo isso git reset --hard HEAD fará é descartar quaisquer alterações não confirmadas que você tenha.

Então, suponha que o bom commit ao qual você deseja voltar seja f414f31.(Você pode encontrar isso através git log ou qualquer navegador de histórico.) Você terá algumas opções diferentes dependendo exatamente do que deseja fazer:

  • Altere seu branch atual para apontar para o commit mais antigo.Você poderia fazer isso com git reset --hard f414f31.No entanto, isso está reescrevendo a história do seu branch, então você deve evitá-lo se tiver compartilhado esse branch com alguém.Além disso, os commits que você fez depois f414f31 não estará mais na história do seu master filial.
  • Crie um novo commit que represente exatamente o mesmo estado do projeto que f414f31, mas apenas adiciona isso ao histórico, para que você não perca nenhum histórico.Você pode fazer isso usando as etapas sugeridas em esta resposta - algo como:

    git reset --hard f414f31
    git reset --soft HEAD@{1}
    git commit -m "Reverting to the state of the project at f414f31"
    

Outras dicas

AVISO: git clean -f removerá arquivos não rastreados, o que significa que eles desaparecerão definitivamente, pois não estão armazenados no repositório.Certifique-se de que realmente deseja remover todos os arquivos não rastreados antes de fazer isso.


Experimente isso e veja git clean -f.

git reset --hard não removerá arquivos não rastreados, onde como git-clean removerá todos os arquivos do diretório raiz rastreado que não estejam no rastreamento do Git.

Alternativamente, como disse @Paul Betts, você pode fazer isso (mas tenha cuidado - isso também remove todos os arquivos ignorados)

  • git clean -df
  • git clean -xdf CUIDADO!Isso também excluirá arquivos ignorados
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top