Question: Is there a good way in Perforce to move unsubmitted changes to a different stream before submitting them (equivalent of `git stash`, `git checkout otherbranch`, `git stash pop`)?

I currently have the files checked out locally (non-exclusively) and edited. I've tried shelving them and then trying to unshelve them into the target stream, but I get "file(s) not in client view". When I view the changelist (shelved or not), the files all have paths that include the original stream.

My target stream is one I just created, parented off the original stream. I'm using P4V. The version of Perforce Visual Components I have installed is 123.57.9578, and when I run p4 from the command line, it says "Server 2012.2/551823". I can add more info if necessary.

Answer: 
If you're for some reason more comfortable using P4V than command line, the solution az2tonez gave can be done with the GUI, at least in P4V 2014.2.

1. Shelve your changeset, and make sure you have no other files checked out in the workspace.
2. In the 'Streams' tab, drag the workspace icon from the current stream to the stream you want to move the changes **to**, and get the latest changes.
3. Unshelve the files in the 'Pending' tab. Under options select 'Map unshelved files' and select the stream you want to move the changeset **from**, and press 'Unshelve'.
4. Resolve files using source.
5. Submit your changes, and voilá! Your changes should now be in the other stream.
I believe the shelve/unshelve technique requires the 2013.1 server, not the 2012.2 server. You should confirm this with Perforce Technical Support.