Ho sempre pensato git reset
e git checkout
uguale, nel senso che entrambi riportano il progetto a un impegno specifico. Tuttavia, ritengo che non possano essere esattamente gli stessi, poiché sarebbe ridondante. Qual è la differenza effettiva tra i due? Sono un po 'confuso, poiché lo svn deve solo svn co
ripristinare il commit.
AGGIUNTO
VonC e Charles hanno spiegato le differenze tra git reset
e git checkout
davvero bene. La mia attuale comprensione è che git reset
riporta tutte le modifiche a un commit specifico, mentre git checkout
più o meno si prepara per un ramo. Ho trovato i seguenti due diagrammi abbastanza utili per giungere a questa comprensione:
AGGIUNTO 3
Da http://think-like-a-git.net/sections/rebase-from-the-ground-up/using-git-cherry-pick-to-simulate-git-rebase.html , checkout e reset possono emulare il rebase.
git checkout bar
git reset --hard newbar
git branch -d newbar
-- files
varianti; non ne sono sicuro.) Questo diagramma fa sembrare che la differenza principale sia se influenzano l'indice o il WD. Vedi la mia risposta al riguardo. Il 2 ° e il 3 ° diagramma sono molto utili per vedere la vera differenza. Il quarto e il quinto diagramma sono utili per verificare se capisci cosa fanno questi comandi, ma non ti aiuteranno davvero ad arrivarci.
think-like-a-git.net
sono necessari passaggi aggiuntivi (forniti nell'articolo collegato ) per prevenire la perdita di dati.