Я всегда думал об одном git reset
и git checkout
том же, в том смысле, что оба возвращают проект к определенной фиксации. Тем не менее, я чувствую, что они не могут быть точно такими же, поскольку это было бы излишним. Какова реальная разница между ними? Я немного сбит с толку, так как svn svn co
нужно только отменить коммит.
ADDED
VonC и Чарльз объяснили разницу между git reset
и git checkout
очень хорошо. Мое текущее понимание состоит в том, что git reset
все изменения возвращаются к конкретному коммиту, тогда как git checkout
более или менее готовятся к ветке. Я нашел следующие две диаграммы весьма полезными для достижения этого понимания:
ДОБАВЛЕНО 3
Из http://think-like-a-git.net/sections/rebase-from-the-ground-up/using-git-cherry-pick-to-simulate-git-rebase.html оформить заказ и сброс можно эмулировать ребаз.
git checkout bar
git reset --hard newbar
git branch -d newbar
-- files
вариантов; я не уверен.) На этой диаграмме видно, что основное различие заключается в том, влияют ли они на индекс или WD. Смотрите мой ответ по этому поводу. 2-я и 3-я диаграммы очень помогают увидеть реальную разницу. Четвертая и пятая диаграммы полезны для проверки того, понимаете ли вы, что делают эти команды, но на самом деле они вам не помогут.
think-like-a-git.net
для предотвращения потери данных требуются дополнительные шаги (приведенные в связанной статье).