DX is still a work in progress; it's production quality but definitely has some known limitations. I do recall that this limitation is one that the DX team is looking to address, but that's not a current feature, so we can't depend on that.
This basically happens today because Salesforce doesn't do a full sync when pulling, but only tracks things that have changed on the server since the last push. Since there are no changes, it won't pull anything. In the future, a cleaner alternative might become available (hopefully sooner than later!).
Hopefully, you already have a package you can use in your scratch org to pull everything back down? If you do, it's pretty much as simple as:
sfdx force:mdapi:retrieve -p "Some Package" -d . -u userNameOrAlias
unzip unpackaged
sfdx force:mdapi:convert -r "Some Package"
This assumes you have a project configuration file, want to use the default path, and just looking to put everything back in order. You'll have to do some clean up and diffs afterwards, but at least you'll be back in sync.
Otherwise, if you don't have a package, you'll have to build one, or a manual package.xml file to download everything you want. If you do that, the force:mdapi:retrieve
command uses -k name-of-package.xml
instead of the -p "Package Name"
format.
sfdx force:source:pull
it will only bring the differences (changes you have done manually since your last push) to the org. If you have lost your meta-data which you push to the org, may be setup a password for your scratch org user and use an IDE like eclipse (FORCE.COM IDE) to pull specific meta down. OR you could use ant tool if you are familiar with it. – Ranga Jun 25 '18 at 19:02