First a warning: When you are implementing a big feature, split it in small pieces and commit it regularly. It’s not a good idea to work for a long time without committing your changes.
Source: How to recover dropped data from stash | Opensource.com
Git can save your bacon, but nothing beats applying the “saving frequently and often” approach. Commit frequently and often, stash sparingly, branch as necessary, push always.