Eu sempre pensei git reset
e git checkout
como o mesmo, no sentido de que ambos trazem o projeto de volta para um commit específico. No entanto, acho que eles não podem ser exatamente iguais, pois isso seria redundante. Qual é a diferença real entre os dois? Estou um pouco confuso, pois o svn só precisa svn co
reverter o commit.
ADICIONADO
VonC e Charles explicaram as diferenças entre git reset
e git checkout
muito bem. Meu entendimento atual é que git reset
reverte todas as alterações de volta para um commit específico, enquanto que git checkout
mais ou menos se prepara para um branch. Achei os dois diagramas a seguir bastante úteis para chegar a esse entendimento:
ADICIONADOS 3
Em http://think-like-a-git.net/sections/rebase-from-the-ground-up/using-git-cherry-pick-to-simulate-git-rebase.html , a finalização da compra e a redefinição podem emular a rebase.
git checkout bar
git reset --hard newbar
git branch -d newbar
-- files
variantes; não tenho certeza.) Esse diagrama faz parecer que a principal diferença é se elas afetam o índice ou o WD. Veja minha resposta sobre isso. Os diagramas 2 e 3 são muito úteis para ver a diferença real. Os diagramas 4 e 5 são úteis para verificar se você entende o que esses comandos fazem, mas realmente não o ajudam a chegar lá.
think-like-a-git.net
são necessárias etapas adicionais (fornecidas no artigo vinculado ) para evitar a perda de dados.