Pergunta

Como posso ir sobre a reversão para um commit específico no git?

A melhor resposta que alguém poderia me dar era usar vezes git revert X até eu chegar ao desejado cometer.

Então, digamos que eu quero voltar a um commit que é 20 commits de idade, eu teria que executá-lo 20 vezes.

Existe uma maneira mais fácil de fazer isso?

Eu não posso usar redefinido porque este repositório é público.

Foi útil?

Solução

Tente isto:

git checkout [revision] .

onde [revision] é o hash commit (por exemplo: 12345678901234567890123456789012345678ab).

Não se esqueça do . no final, muito importante. Isto irá aplicar as alterações para a árvore inteira. Você deve executar este comando na raiz do projeto git. Se você estiver em qualquer diretório sub, então este comando só muda os arquivos no diretório atual. Em seguida, cometer e você deve ser bom.

Você pode desfazer isso

git reset --hard 

que irá apagar todas as modificações do diretório de trabalho e área de teste.

Outras dicas

Para reverter para um commit específico:

git reset --hard commit_sha

Para reverter 10 commits volta:

git reset --hard HEAD~10

Você pode usar "revert git", como no post seguinte se você não quer reescrever a história

Como reverter repositório Git para a submissão anterior

Bem, eu acho que a pergunta é, o que você quer dizer com 'roll back'? Se você não pode reset porque é público e que você deseja manter a história intacta cometer, você quer dizer que você só quer sua cópia de trabalho para refletir um commit específico? Use git checkout eo hash cometer.

Edit: Como foi salientado nos comentários, usando git checkout sem especificar um ramo vai deixá-lo em um estado "nenhum ramo". Use git checkout <commit> -b <branchname> para Caixa em um ramo, ou git checkout <commit> . para Caixa no branch atual.

Os estados cartaz original:

A melhor resposta que alguém poderia me dar era usar vezes git revert X até que eu alcançar o desejado cometer.

Então, digamos que eu quero voltar a um commit que é 20 commits de idade, eu teria para executá-lo 20 vezes.

Existe uma maneira mais fácil de fazer isso?

Eu não posso usar reinicialização causa este repo é pública.

Não é necessário o uso de vezes git revert X. git revert pode aceitar uma comprometer-gama como argumento, assim você só precisa usá-lo uma vez para reverter uma gama de commits Por exemplo, se você quiser reverter os últimos 20 commits:.

git revert --no-edit HEAD~20..

O comprometer HEAD~20.. intervalo é curto para HEAD~20..HEAD, e significa "começar a partir do 20 th pai da cabeça submeter, e reverter todos os commits depois até a cabeça".

Isso vai reverter essa últimos 20 commits, assumindo que nenhum deles é merge commits. Se houver commits mesclagem, então você não pode reverter-los todos em um único comando, você vai precisar revertê-los individualmente com

git revert -m 1 <merge-commit>

Note também que eu testei usando um intervalo com git revert usando git versão 1.9.0. Se você estiver usando uma versão mais antiga do git, usando um intervalo com git revert pode ou não trabalho .

Neste caso, git revert é preferido sobre git checkout.

Nota que, ao contrário esta resposta que diz usar git checkout , git revert vai realmente remover todos os arquivos que foram adicionados em qualquer um dos commits que você está revertendo , o que torna esta a maneira correta para reverter um intervalo de revisões.

Documentação

Passo 1: lista de commits buscar:

git log

Você vai obter a lista, como neste exemplo:

[Comp:Folder User$ git log
commit 54b11d42e12dc6e9f070a8b5095a4492216d5320
Author: author <author@gmail.com>
Date:   Fri Jul 8 23:42:22 2016 +0300

This is last commit message

commit fd6cb176297acca4dbc69d15d6b7f78a2463482f
Author: author <author@gmail.com>
Date:   Fri Jun 24 20:20:24 2016 +0300

This is previous commit message

commit ab0de062136da650ffc27cfb57febac8efb84b8d
Author: author <author@gmail.com>
Date:   Thu Jun 23 00:41:55 2016 +0300

This is previous previous commit message
...

Passo 2: Copiar necessário comprometer haxixe e colá-lo para check-out:

git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482f

Isso é tudo.

git read-tree -um @ $commit_to_revert_to

irá fazê-lo. É de "git checkout", mas sem atualizar HEAD.

Você pode conseguir o mesmo efeito com

git checkout $commit_to_revert_to
git reset --soft @{1}

Se você preferir amarrando comandos de conveniência juntos.

Estes deixá-lo com o seu worktree e índice no estado desejado, você pode apenas git commit ao fim.

Eu não tenho certeza o que mudou, mas eu sou incapaz de fazer o checkout de um commit específico sem a --detach opção. O comando completo que funcionou para mim foi: git checkout --detach [commit hash]

Para voltar do estado destacado I fez check-out a minha filial local: git checkout master

Vamos dizer que você trabalha em um projeto e depois de um dia ou assim. Você percebe um recurso ainda está dando erros. Mas você não sabe o que mudar você fez que causou o erro. Então você tem que pescar commits de trabalho anteriores. Para reverter para um commit específico:

git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .

A aprovação, assim que cometem funciona para você. Não mais erro. Você identificou o problema. Agora você pode voltar para a mais recente commit:

git checkout 792d9294f652d753514dc2033a04d742decb82a5 .

e check-out um arquivo específico antes que causou o erro (no meu caso exemplo, eu uso Gemfile.lock):

git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 -- /projects/myproject/Gemfile.lock

E esta é uma maneira de erros punho você criou na commits sem perceber os erros até mais tarde.

Quer modo destacado cabeça?

Se você deseja tempo de reversão X a um determinado comprometer com um MORADIA CABEÇA (ou seja, você não pode mexer-se qualquer coisa), então por todos os meios, use o seguinte:

(substitua X com quantos commits que você deseja voltar)

git checkout HEAD~X

I.E. para voltar um commit:

git checkout HEAD~1

Aqui está um exemplo de fazer isso

    cd /yourprojects/project-acme 


    git checkout efc11170c78 .

Você pode encontrar o ID relacionado com cada commit cometer na seção commits de GitHub / BitBucket / gitlab. É muito simples, suponha que o cometa ID é 5889575 , em seguida, se você quiser voltar a esta parte em seu código, então você simplesmente precisa digitar

git checkout 5889575 .

Isto irá levá-lo a esse ponto de tempo em seu código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top