Я просто сделал что-то глупое. В моем проекте fooclient я просто сделал:
git remote add official https://github.com/fooserver
git pull official master
Другими словами, я вставил совершенно другую кодовую базу (сервер, а не клиент) в свой рабочий каталог. Не удивительно, что было не так много конфликтов слияния (в конце концов, имена файлов совершенно разные). Также неудивительно, что Git полностью не предупредил меня, что в репозиториях не было ни одного общего предка.
В этой конкретной ситуации я могу восстановиться, выполнив следующее:
cp file-i-worked-on.js ~
git reset --hard HEAD # to discard broken merge conflicts
git checkout a12345 # where a12345 is the latest head of fooclient that I had checked out
cp ~/file-i-worked-on.js .
Но какова будет более общая стратегия?