Redefinir todas as alterações após a última confirmação no git


324

Como posso desfazer todas as alterações feitas no meu diretório após a última confirmação, incluindo excluir arquivos adicionados, redefinir arquivos modificados e adicionar novamente arquivos excluídos?


possível duplicata de Reverter para Git commit anterior
Nawfal

8
@nawfal pode ser uma duplicata, mas 'redefinir todas as alterações após o último commit' corresponde a mais critérios de pesquisa (palavras pesquisadas no google) do que o correspondente 'como reverter o repositório git'. Pelo menos para pessoas como eu que não têm Inglês como língua materna: d
Shirish Herwade

Respostas:


561

Redefina primeiro as alterações

git reset HEAD --hard

depois limpe tudo não rastreado. Se você deseja manter os arquivos que não são rastreados .gitignore, tenha cuidado com este comando.

git clean -fd

7
@ Adam: Às vezes, você também pode querer a -xopção git clean, que o direciona para remover arquivos ignorados também.
Cascabel

31
Se você deseja manter os arquivos que não são rastreados devido ao .gitignore, tenha cuidado com o git clean -fdcomando
bitsoflogic 23/09/14

3
@ Levinaris: É o contrário git clean -fdque não exclui arquivos ignorados. -xvai.
Robert Siemer

5
@RobertSiemer Na verdade, pode! Se você tiver alguma pasta composta inteiramente de arquivos ignorados, ela removerá essas pastas, excluindo os arquivos ignorados. Considere um arquivo .gitignore como esse aqui: stackoverflow.com/q/25554504/456645 . Neste exemplo, suponha que algumas pastas não tenham arquivos PHP. git clean -fdexcluirá essas pastas e arquivos não rastreados. Testado com a versão 1.9.1 do git
bitsoflogic

3
mas por que a segunda 'limpeza' é necessária?
Shirish Herwade

71

Como posso desfazer todas as alterações feitas no meu diretório após a última confirmação, incluindo excluir arquivos adicionados, redefinir arquivos modificados e adicionar novamente arquivos excluídos?

  1. Você pode desfazer alterações nos arquivos rastreados com:

    git reset HEAD --hard
    
  2. Você pode remover arquivos não rastreados com:

    git clean -f
    
  3. Você pode remover arquivos e diretórios não rastreados com:

    git clean -fd
    

    mas você não pode desfazer a alteração para arquivos não rastreados .

  4. Você pode remover arquivos e diretórios ignorados e não rastreados

    git clean -fdx
    

    mas você não pode desfazer a alteração para arquivos ignorados .

Você também pode definir clean.requireForcepara false:

git config --global --add clean.requireForce false

para evitar usar -f( --force) quando você usa git clean.


2
Impressionante, exatamente o que eu precisava. Obrigado pela comparação de todos os comandos relevantes!
Marquee

-1

Existem dois comandos que funcionarão nessa situação,

root> git reset --hard HEAD ~ 1

root> git push -f

Para mais comandos git, consulte esta página


1
git push -fnão está relacionado à pergunta e, nesse cenário, é perigoso
bigode1up
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.