EDIT: Since git 2.13, there is a command to save a specific path to the stash: git stash push
git stash push -m welcome_cart app/views/cart/welcome.thtml
OLD ANSWER:
You can do that using git stash –patch (or git stash -p) — you’ll enter interactive mode where you’ll be presented with each hunk that was changed. Use n to skip the files that you don’t want to stash, y when you encounter the one that you want to stash, and q to quit and leave the remaining hunks unstashed. a will stash the shown hunk and the rest of the hunks in that file.
Not the most user-friendly approach, but it gets the work done if you really need it.
I usually add to index changes I don’t want to stash and then stash with –keep-index option.
git add app/controllers/cart_controller.php
git stash –keep-index
git reset
The last step is optional, but usually, you want it. It removes changes from the index.
Warning
As noted in the comments, git stash –keep-index pushes everything onto the stash, both staged and unstaged. The –keep-index just leaves the index alone after the stash is done. This can cause merge conflicts when you later pop the stash.