Как указано в выбранном объяснении, git reset - это хорошо.
Но в настоящее время мы часто используем подмодули: репозитории внутри репозиториев. Например, если вы используете ZF3 и jQuery в своем проекте, вы, скорее всего, захотите, чтобы они были клонированы из своих исходных репозиториев.
В таком случае git reset недостаточно.
Нам нужно обновить подмодули до той точной версии, которая определена в нашем репозитории:
git checkout master
git fetch origin master
git reset --hard origin/master
git pull
git submodule foreach git submodule update
git status
это то же самое, что вы рекурсивно войдете (cd) в рабочий каталог каждого субмодуля и запустите:
git submodule update
И это очень отличается от
git checkout master
git pull
потому что подмодули указывают не на ветвление, а на фиксацию.
В тех случаях, когда вы вручную извлекаете какую-то ветку для одного или нескольких подмодулей
вы можете запустить
git submodule foreach git pull