Quero reverter as alterações feitas por um commit específico em um determinado arquivo.
Posso usar o comando git revert para isso?
Alguma outra maneira simples de fazer isso?
git
version-control
revert
Lakshman Prasad
fonte
fonte
Respostas:
A maneira mais limpa que eu já vi de fazer isso é descrita aqui
Semelhante à resposta do VonC, mas usando
git show
egit apply
.fonte
fatal: unrecognized input
-3
flag ao git request para mesclagem de três vias quando o patch falha, pois geralmente estou corrigindo uma alteração um pouco no tempo.some_file.c
inclui o caminho para o arquivo, se houver um caso contrário você vai silenciosamente remendo nada :)Supondo que não há problema em alterar o histórico de consolidação, aqui está um fluxo de trabalho para reverter alterações em um único arquivo em uma consolidação anterior:
Por exemplo, você deseja reverter as alterações em 1 arquivo (
badfile.txt
) no commitaaa222
:Rebase na confirmação básica, corrija a confirmação do problema e continue.
1) Inicie o rebase interativo:
2) Marque o problema de confirmação para edição no editor, alterando
pick
parae
(para edição):3) Reverta as alterações no arquivo incorreto:
4) Adicione as alterações e corrija o commit:
5) Termine o rebase:
fonte
edit
não estavam aparecendo como alterados. Masgit show -- badfile.txt | git apply -R
deu a resposta que eu precisava <3git revert
é para todo o conteúdo do arquivo em uma consolidação.Para um único arquivo, você pode escrevê-lo :
(Nos utilitários git-shell-scripts da smtlaissezfaire )
Nota:
Outra maneira é descrita aqui se você ainda não confirmou sua modificação atual.
git checkout
possui algumas opções para um arquivo, modificando o arquivo de HEAD, substituindo sua alteração.Dropped.on.Caprica menciona nos comentários :
fonte
git revert-file <hash> <file-loc>
e reverter esse arquivo específico. Eu tirei essa resposta (embora eu tenha que fazer algumas edições para funcionar corretamente). Você pode encontrar uma cópia do meu.gitconfig
e roteiro editado aqui: gist.github.com/droppedoncaprica/5b67ec0021371a0ad438Eu simplesmente usaria a
--no-commit
opção paragit-revert
remover os arquivos que você não deseja reverter do índice antes de finalmente enviá-lo. Aqui está um exemplo mostrando como reverter facilmente apenas as alterações para foo.c no segundo commit mais recente:O primeiro
git-reset
"desestabiliza" todos os arquivos, para que possamos adicionar novamente apenas o arquivo que queremos reverter. A finalgit-reset --hard
se livra do arquivo restante revertido que não queremos manter.fonte
Muito mais simples:
então
e depois
o arquivo se foi e confirma o hash, a mensagem etc. é a mesma.
fonte
git checkout -- path/to/file/to/revert
passo? Além disso, não é verdade que o hash é o mesmo depois, certo? A última frase pode ser melhor como algo como: "O resultado é que a última confirmação é substituída por uma nova que difere apenas no fato de não conter as alterações no arquivo revertido".O comando acima retirará o arquivo do commit, mas ele será refletido no
git status
.O comando acima reverterá as alterações (como resultado, você obtém o mesmo arquivo que HEAD).
(Passe
--amend
para alterar o commit.)Com isso, o arquivo que já está no commit é removido e revertido.
As etapas acima devem ser seguidas na ramificação em que a confirmação é feita.
fonte
Você pode seguir este procedimento:
git revert -n <*commit*>
(-n
reverta todas as alterações, mas não as confirma)git add <*filename*>
(nome do (s) arquivo (s) que você deseja reverter e confirmar)git commit -m 'reverted message'
(adicione uma mensagem para reverter)fonte
Se você deseja redefinir as alterações em um arquivo a partir do seu último commit, é isso que geralmente estou usando. Eu acho que essa é a solução mais simples.
Observe que o arquivo será adicionado à área de preparação.
Espero que ajude :)
fonte