 <blockquote> <p>If I am to switch branches, it will automatically stash my working copy before switching to the new branch.</p> </blockquote> <p>Nope! Git doesn't automatically stash local changes for you. Also, if you have uncommitted changes that conflict with the branch you're checking out, Git won't let you check out the branch in question. You'll need to either discard or stash them "manually" before checking out that other branch.</p> <blockquote> <p>it appears pretty clear to me that [...] your working copy files are completely independent from your branches, as are stashes.</p> </blockquote> <p>Yes, and there are good reasons for that. In particular, one use case for stashing is when you start doing changes while the "wrong" branch is checked out. You can then get out of trouble by</p> <ul> <li>stashing your local changes (thereby landing in a clean working state),</li> <li>checking out the "correct" branch,</li> <li>popping that stash to recover your local changes.</li> </ul> <blockquote> <p>Say I am developing two features simultaneously in two different branches and want to constantly jump back and forth. Do I need to remember to stash my working copy files before every time I switch or is there a better approach to this?</p> </blockquote> <p>Yes, stashing your changes before switching to another branch, then popping a previous stash, would be the normal workflow. If you switch branches often, that can indeed be tedious, but if you use Git from the command line, you can define <a href="http://git-scm.com/book/en/v2/Git-Basics-Git-Aliases" rel="nofollow">aliases</a> in order to abstract some of that complexity away.</p> <p>I've never used SourceTree myself, but I can imagine how that stashing/checking out/popping can involve quite a lot of tedious mouse clicks. Apparently, though, SourceTree introduced a mechanism called "<a href="https://blog.sourcetreeapp.com/2012/02/08/custom-actions-more-power-to-you/" rel="nofollow">Custom Actions</a>" that allow you to define your own commands, <a href="https://answers.atlassian.com/questions/245850/how-to-run-a-git-command-as-a-custom-action" rel="nofollow">including Git commands</a>. You might want to look into it...</p>