Pergunta

Estou tentando aprender como restaurar ou reverter arquivos e projetos para um estado anterior e não entendo a diferença entre git revert, checkout e reset.Por que existem três comandos diferentes para aparentemente o mesmo propósito e quando alguém deve escolher um em vez do outro?

Foi útil?

Solução

Esses três comandos têm finalidades totalmente diferentes. Eles não são nem remotamente semelhantes.

git revert

Este comando cria um novo commit que desfaz as mudanças de um commit anterior. Este comando adiciona um novo histórico ao projeto (não modifica o histórico existente).

git checkout

Este comando verifica o conteúdo do repositório e o coloca em sua árvore de trabalho. Ele também pode ter outros efeitos, dependendo de como o comando foi chamado. Por exemplo, ele também pode alterar em qual branch você está trabalhando atualmente. Este comando não faz nenhuma alteração no histórico.

git reset

Este comando é um pouco mais complicado. Na verdade, ele faz algumas coisas diferentes, dependendo de como é invocado. Ele modifica o índice (a chamada "área de teste"). Ou muda para qual commit um branch head está atualmente apontando. Este comando pode alterar o histórico existente (mudando o commit que um branch faz referência).

Usando esses comandos

Se um commit foi feito em algum lugar na história do projeto, e mais tarde você decidir que o commit está errado e não deveria ter sido feito, então git revert é a ferramenta para o trabalho. Isso irá desfazer as alterações introduzidas pelo commit inválido, gravando o "desfazer" no histórico.

Se você modificou um arquivo em sua árvore de trabalho, mas não confirmou a mudança, pode usar git checkout para fazer o checkout de uma cópia do arquivo recém-retirada do repositório.

Se você fez um commit, mas não o compartilhou com ninguém e você decide que não o quer, então você pode usar git reset para reescrever o histórico de forma que pareça que você nunca fez aquele commit.

Estes são apenas alguns dos cenários de uso possíveis. Existem outros comandos que podem ser úteis em algumas situações, e os três comandos acima também têm outros usos.

Outras dicas

  • git revert é usado para desfazer um commit anterior.No git, você não pode alterar ou apagar um commit anterior.(Na verdade, você pode, mas pode causar problemas.) Então, ao invés de editar o commit anterior, reverter introduz um novo commit que reverte um anterior.
  • git reset é usado para desfazer alterações em seu diretório de trabalho que ainda não foram comprometidas.
  • git checkout é usado para copiar um arquivo de algum outro commit para sua árvore de trabalho atual.Ele não confirma o arquivo automaticamente.

Digamos que você tenha commits:

C
B
A

git revert B, criará um commit que desfaz as alterações no B.

git revert A, criará um commit que desfaz as alterações no A, mas não altera as alterações no B

Observe que se as alterações em B dependerem de alterações em A, a reversão de A não será possível.

git reset --soft A, mudará o histórico de commits e o repositório;o diretório de teste e de trabalho ainda estará no estado de C.

git reset --mixed A, mudará o histórico de commit, repositório e teste;o diretório de trabalho ainda estará no estado de C.

git reset --hard A, mudará o histórico de commits, repositório, teste e diretório de trabalho;você voltará ao estado de A completamente.

  • git checkout modifica sua árvore de trabalho,
  • git reset modifica a referência do branch para o qual você está apontando,
  • git revert adiciona um commit que desfaz as alterações.

Reiniciar - No nível de confirmação, redefinir é uma maneira de mover a ponta de um branch para um commit diferente.Isso pode ser usado para remover commits do branch atual.

Reverter - Reverter desfaz um commit criando um novo commit.Esta é uma maneira segura de desfazer as alterações, pois não há chance de reescrever o histórico de commits. Compare isso com git reset, que altera o histórico de commits existente.Por esta razão, git revert deve ser usado para desfazer alterações em um branch público, e git reset deve ser reservado para desfazer alterações em um branch privado.

Você pode dar uma olhada neste link- Redefinir, verificar e reverter

Se você quebrou a árvore, mas não confirmou o código, você pode usar git reset e, se quiser apenas restaurar um arquivo, pode usar git checkout.

Se você quebrou a árvore e confirmou o código, pode usar git revert HEAD.

http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html

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