git desfaz todas as alterações não confirmadas ou não confirmadas

834

Estou tentando desfazer todas as alterações desde o meu último commit. Eu tentei git reset --harde git reset --hard HEADdepois de ver este post . Eu respondo com a cabeça agora em 18c3773 ... mas quando olho para a minha fonte local, todos os arquivos ainda estão lá. o que estou perdendo?

Antarr Byrd
fonte
1
Este é um grande recurso em linha reta do Github: Como desfazer (quase) qualquer coisa com Git
jasonleonhard
Fácil de entender e simples de ler: git-scm.com/book/en/v2/Git-Basics-Undoing-Things
MyTitle

Respostas:

1620
  • Isso desestabilizará todos os arquivos com os quais você pode ter preparado git add:

    git reset
    
  • Isso reverterá todas as alterações não confirmadas locais (devem ser executadas no repo root):

    git checkout .
    

    Você também pode reverter as alterações não confirmadas apenas para um arquivo ou diretório específico:

    git checkout [some_dir|file.txt]
    

    Ainda outra maneira de reverter todas as alterações não confirmadas (mais para digitar, mas funciona em qualquer subdiretório):

    git reset --hard HEAD
    
  • Isso removerá todos os arquivos não rastreados locais, portanto, apenas os arquivos rastreados pelo git permanecem:

    git clean -fdx
    

    AVISO: -x também removerá todos os arquivos ignorados, incluindo os especificados por .gitignore! Você pode usar -npara visualizar os arquivos a serem excluídos.


Para resumir: a execução de comandos abaixo é basicamente equivalente a nova git clonefonte original (mas não faz o download novamente, é muito mais rápido):

git reset
git checkout .
git clean -fdx

O uso típico para isso seria nos scripts de construção, quando você deve garantir que sua árvore esteja absolutamente limpa - não possui modificações ou arquivos de objetos criados localmente ou cria artefatos, e você deseja fazê-la funcionar muito rápido e não clonar repositório inteiro toda vez.

mvp
fonte
@turibe isso mesmo. Eu tive que iniciar meu projeto várias vezes porque estava removendo todas as dependências baixadas e minha pasta .idea. Precisa de uma solução melhor.
EresDev
2
@EresDev, você não precisa executar git clean, ele desfaz alterações não confirmadas, mas mantém todos os arquivos não rastreados ou adicionados. Porém, isso pode afetar o resultado da compilação porque alguns arquivos não rastreados podem estar interferindo. Por exemplo, e se o diretório .idea estiver corrompido?
mvp
git resetme diz que tenho mudanças eu preciso para salvar
Daniel Springer
1
executando git clean -fdxexcluiu meu node_modulese .env, ótimo
fires3as0n 12/02
1
@ fires3as0n O que mais você esperava? Isso estava prestes a acontecer. Há um aviso na resposta também.
Rishav 20/02
148

Se você deseja " desfazer " todas as alterações não confirmadas, execute:

git stash
git stash drop

Se você tiver arquivos não rastreados (verifique executando git status), eles podem ser removidos executando:

git clean -fdx

git stashcria um novo stash que se tornará stash @ {0} . Se você deseja verificar primeiro, pode correr git stash listpara ver uma lista dos seus esconderijos. Será algo como:

stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes

Cada stash é nomeado após a mensagem de confirmação anterior.

Abram
fonte
2
Uma boa solução, mas na verdade você precisa estágio alterações usando git add .antes git stashporque ele estava me mostrando mudanças uncommited mesmo depoisgit stash
EresDev
21

também há git stash- que "esconde" as alterações locais e pode ser reaplicado posteriormente ou descartado se não for mais necessário

mais informações sobre esconderijo

keshav
fonte
12

Estou usando a árvore de origem .... Você pode reverter todas as alterações não confirmadas com 2 etapas fáceis:

1) basta redefinir o status do arquivo da área de trabalho

insira a descrição da imagem aqui 2) selecione todos os arquivos de estágio (comando + a), clique com o botão direito do mouse e selecione remover

insira a descrição da imagem aqui

É simples assim: D

user1872384
fonte
Se você redefinir e alterar a ramificação e rebase na ramificação redefinida, isso será prejudicial. A redefinição é útil, mas não deve ser usada para eliminar alterações não confirmadas. No caso de descartar alterações não confirmadas, apenas esconda e solte o esconderijo.
Dinu Nicolae
10

O que eu faço é

git add . (adding everything)
git stash 
git stash drop

Um forro: git add . && git stash && git stash drop

Ralph
fonte
este é o melhor
Madrugada
7

Para quem chegou aqui procurando se poderia desfazer git clean -f -d, pelo qual um arquivo criado no eclipse foi excluído,

Você pode fazer o mesmo na interface do usuário usando "restaurar a partir do histórico local" para ref: Restaurar a partir do histórico local

Abdul Rahman K
fonte
3
Eu não votei no entanto, sua resposta é menos que clara sobre sua intenção; ajudaria se você reformulasse a primeira frase da resposta.
Mark Schultheiss
5

Estados em transição de um commit para um novo commit

0. last commit,i.e. HEAD commit
1. Working tree changes, file/directory deletion,adding,modification.
2. The changes are staged in index
3. Staged changes are committed

Ação para transição de estado

0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"

Check diff

0->1: git diff
0->2: git diff --cached
0->1, and 0->2: git diff HEAD
last last commit->last commit: git diff HEAD^ HEAD

Reverter para a última confirmação

2->1: git reset
1->0: git checkout .     #only for tracked files/directories(actions include modifying/deleting tracked files/directories)
1->0: git clean -fdx     #only for untracked files/directories(action includes adding new files/directories)
2->1, and 1->0: git reset --hard HEAD

Equivalente ao clone git, sem baixar novamente nada

git reset && git checkout . && git clean -fdx
Zii
fonte
Não vejo como isso se relaciona com a pergunta. Esta é apenas uma série de receitas estranhas, sem qualquer substância real.
mvp 10/05