git ––force push

Если  вам, как и мне, вдруг, приспичило сделать pull текущей ветки с перезаписью всех измененных файлов, то у меня есть рецепт. Лично для меня такая надобность актуальна: база данных распухла до размеров больше гигабайта и локально тестировать сайт уже не представляется возможным. WAMP натуральным образом дохнет  в корчах при обращении к сайту, поэтому я настроил netbeans на выгрузку файлов при сохранении. Делаю изменения и тестирую прямо на сервере на тестовом поддомене. Коммичу и пушу изменения в реп и кое-что дорабатываю с часик дома, после чего по приходе на работу вполне успешно делаю пулл на рабочем компьютере. Проблема возникала в плане выгрузки всех актуальных изменений на сервер. Делать синхронизацию средствами netbeans по мне слишком муторно. При попытке сделать git pull — он вполне обоснованно начинал ругаться фразами типа:

error: Your local changes to '*****' would be overwritten by merge.  Aborting.
Please, commit your changes or stash them before you can merge.

Просит типа сделать коммит сделанных изменений. Но делать коммит на сервере в такой ситуации, как выяснилось, откровенно хреновая идея. Можно поиметь кучу геморроя с разрешением конфликтов, что собственно у меня и произошло. Делать это на сервере без нормального редактора для разрешения конфликтов, сказать, что проблематично — это будет слишком мягко сказано, да и в принципе — все конфликты совершенно идиотские: одни и те же изменения оказываются в разных коммитах.
Гугление «git —force push» показало, (подумалось, что должно же быть что-то подобное), что такой опции в гите нет, но навело на хреновую идею, высказанную на паре сайтов — сделать git hard reset head, перед git pull. Не вздумайте повторить.
Это было даже худшей идеей, чем сделать коммит, этот долбаный ресет снес к фигам мне все файлы из заигноренных директорий: все загруженные пользователями файлы и сгенерированные отчеты. Как же хорошо, что до этого я догадался заархивировать все файлы проекта и положить в директорию выше проекта.

Хочу сказать что гуглил и мучился я достаточно долго прежде чем набрел на нужный рецепт. Нужная мне команда выглядит так:

git checkout -- .

Она возвращает все измененные файлы проекта в индексе git к состоянию последнего успешного pull. После чего совершенно спокойно можно сделать git pull. Все директории и файлы на сервере не внесенные в индекс git останутся нетронутыми. Именно то, что мне так давно было нужно.
git status выдает, что:

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.

этим он говорит, что последний коммит был сделан не на сервере, что мы получили его на сервер, запустив pull. То есть состояние проекта на один коммит впереди, чем локальный репозиторий проекта на сервере. Это нормально.
Ну и покажет, если есть файлы не в индексе:

# Untracked files:
#   (use "git add ..." to include in what will be committed)

Это повод задуматься о внесении дополнений в .gitignore