Após a última confirmação, modifiquei vários arquivos na minha cópia de trabalho, mas quero desfazer as alterações em um desses arquivos, pois redefini-lo para o mesmo estado que a confirmação mais recente.
No entanto, só quero desfazer as alterações na cópia de trabalho apenas desse arquivo, nada mais.
Como faço isso?
git reset HEAD <filename> ; git checkout -- <filename>
HEAD^^
por 2 confirmações das mais recentes ouHEAD^^^
por 3 confirmações. Você também pode usarHEAD~2
, ouHEAD~3
, o que for mais conveniente se você quiser voltar mais confirmações, enquantoHEAD^2
significa "o segundo pai dessa confirmação"; por causa das confirmações de mesclagem, uma confirmação pode ter mais de uma confirmação anterior; portanto, comHEAD^
um número seleciona qual desses pais, enquanto comHEAD~
um número sempre seleciona o primeiro pai, mas esse número de confirmações. Vejagit help rev-parse
para mais detalhes.Apenas use
Isso substituirá o nome do arquivo pela versão mais recente da ramificação atual.
AVISO: suas alterações serão descartadas - nenhum backup é mantido.
fonte
git checkout x
x é um nome de ramificação e um nome de arquivo, não tenho certeza qual é o comportamento padrão, mas acho que o git assumirá que você deseja alternar para a ramificação x. Quando você usa,--
está dizendo que o seguinte é o nome dos arquivos.--
-la. Enquanto ainda estiver correto, como @hasen aponta, se houver uma ambiguidade entre o nome do arquivo e os nomes das filiais, você poderá ter um comportamento muito indesejado aqui!--
, agradável e fácil. Quando o nome de ramos usando nomes de arquivo, deve haver algum pensamento ruim ...Eu usei isso hoje porque percebi que meu favicon havia sido substituído há alguns commits atrás, quando atualizei para o drupal 6.10, então tive que recuperá-lo. Aqui está o que eu fiz:
fonte
git log --oneline <filename>
vai lhe dar um log mais compacto, e incluem apenas alterações no arquivo específicogit reflog <filename>
Se o seu arquivo já estiver preparado (acontece quando você faz um git add etc após a edição do arquivo) para desestabilizar suas alterações.
Usar
Então
Se ainda não estiver preparado, basta usar
fonte
Se você quiser apenas desfazer as alterações do commit anterior nesse arquivo, tente:
Isso fará o checkout do arquivo como era antes da última confirmação. Se você quiser voltar mais algumas confirmações, use a
branchname~n
notação.fonte
branchname^
Eu fiz através do git bash:
(use "git checkout -- <file>..." to discard changes in working directory)
fonte
Sempre fico confuso com isso, então aqui está um caso de teste de lembrete; digamos que temos esse
bash
script para testargit
:Nesse ponto, a alteração não é preparada no cache, assim
git status
como:Se a partir deste ponto
git checkout
, o resultado é este:Se o fizermos
git reset
, o resultado é:Portanto, neste caso - se as alterações não forem testadas,
git reset
não faz diferença, enquanto asgit checkout
substitui.Agora, digamos que a última alteração do script acima seja preparada / armazenada em cache, ou seja, também fizemos
git add b.txt
no final.Nesse caso,
git status
neste momento é:Se a partir deste ponto
git checkout
, o resultado é este:Se o fizermos
git reset
, o resultado é:Portanto, neste caso - se as alterações forem
git reset
preparadas , basicamente as transformadas serão transformadas em etapas - enquantogit checkout
substituem completamente as alterações.fonte
Esta resposta é para o comando necessário para desfazer alterações locais que estão em vários arquivos específicos na mesma ou em várias pastas (ou diretórios). Essas respostas abordam especificamente a pergunta em que um usuário tem mais de um arquivo, mas o usuário não deseja desfazer todas as alterações locais:
Para vários arquivos na mesma pasta:
O asterisco acima faz o truque de desfazer todos os arquivos nesse local em nome1 / nome2.
Nota: nome1, nome2, nomeA, subpasta - todos esses nomes de pastas de exemplo indicam a pasta ou o pacote em que os arquivos em questão podem estar residindo.
fonte
Eu restauro meus arquivos usando o ID SHA. O que faço é
git checkout <sha hash id> <file name>
fonte
Para mim, apenas este funcionou
fonte
Se você ainda não enviou ou compartilhou seu commit:
fonte
Se ele já estiver confirmado, você poderá reverter a alteração para o arquivo e confirmar novamente e depois esmagar o novo commit com o último commit.
fonte
Não sei por que, mas quando tento inserir meu código, ele aparece como uma imagem.
fonte