Иногда бывает, что по запарке запутаюсь в ветвях Git репозитория при всяких merge, rebase, cherry-pick, checkout и т.д.. К счастью, это случается до того, как за-push-ил всю эту галиматью на сервер. Но локальная копия к тому моменту испорчена донельзя.
Как сбросить всё, что натворил, до состояния тупо как на сервере? Можно просто всё удалить, и заново склонировать репозиторий. Но это не по спортивному, плюс теряются всякие файлы из gitignore, которые при этом надо спасать руками. Нужен метод по-цивилизованнее, но такой же эффективный в плане забывания всех не отправленных изменений.
Ну, а суть в том, что что-то напутал в этих делах: paratapok.ru/developer-tools/2593_kak-v-git-perene...
И надо вернуться к тому, что было пока не начал с уставшей бошки переносить кучу коммитов в другую ветку, делая опечатки и потеряв внимательность. Благо, ничего не запушил за время этих манёвров. Т.е. весь кавардак в локальной копии репозитория.
Надо не master, а сразу две ветки, одна из которых даже не улетела на сервер ещё. Она не нужна, на сервере всё из неё всё ещё в master, но локально там фиг знает что уже.
Евгений Самсонов, задача привести состояние локальной копии в идентичное с тем, что на GitHub. Т.е. по всем веткам сразу, как если бы вообще всё выкинул и сделал git clone заново. Но с оговоркой, что не надо трогать файлы из списка .gitignore. Из-за них и весь сыр-бор, так бы не думая снёс всё и заново склонировал бы.
Решилось запуском по очереди для каждой существующей ветки:
git checkout имяветки -f
git pull origin/имяветки
Далее через Visual Studio Team Explorer удаляются лишние (несуществующие на сервере) ветки. Через консоль не захотело (ругалось про head). Возможно, нужен был какой-то ключ, т.к. в VS тоже был вопрос - хочу ли я потерять состояние head (которое с чем-то не стыкуется), но оно и было нужно. Задача все равно привести состояние локальной копии в идентичное с тем, что на GitHub.