I have 3 branches in a project that should've been all discretely separate from the beginning, but alas, I'm still learning git and they got muddled together about halfway through my work.
Currently I can switch between master and my dev-1 branches. In doing so, I get a display of 
M       this/is/a/file.path
M       this/is/also/a/file.path
M       this/is/a/file.path
and I cannot switch two my dev-2 branch without committing or stashing changes, which I don't think I want to do yet.
I would first like to know what the output above actually means. I've found examples that say those files have been modified, which is true, but why do I not have to stash or commit them before switching between master and dev-1?
Furthermore, I'd like my master branch to be completely clean and only have changes on my dev-1 and dev-2 branches, but I am not sure the best ways to accomplish this, as my master and dev-1 branches seem to share information.
 
    