Question: Is there a way to work on the same file but on different features/branches in GIT?

I'm sure there is a way but what is the easiest?  

I don't want to stash my changes as that's cumbersome. 

With SVN I was able to work on 2 separate branches as 2 different entities without any intervention and easy to switch between the two.

Answer: 
use the git worktree.

***`git worktree`***
====================

Git worktree was introduced in 2007 under the `contrib` folder in the git repo and was called `new-workdir`. 

In **git V2.5** it was named `worktree` and it allows you to have multiple instances of the same repository across different folders.

for example:

```
git worktree add <second path>

```

will create another folder on your computer which allows you to work on different branch simultaneously.

---

If you want to remove the worktree, delete the folder and then execute `git worktree prune` which will remove the worktree reference.

> 
> ***`prune`***  
> 
>  Prune working tree information in `$GIT_DIR/worktrees`.
> 
> 
> 

### Creating new worktree

```
# create new branch inside the worktree folder 
git worktree -b <branch name> <path>

```

### Removing worktree

```
# do your code and once you have done 
# commit, push and now you can delete your folder
rm -rf <path>

# Tell git to remove the workdir copy
git worktree prune

```

**Update**
In the coming versions (git 2.17+) a `git worktree delete` will be exposed as a new command for deleting worktrees.

### Listing worktree

[![enter image description here](https://i.stack.imgur.com/PCngz.png)](https://i.stack.imgur.com/PCngz.png)

---

If you use rebase later on:

* Note: ([Since Git 2.7](https://github.com/git/git/blob/master/Documentation/RelNotes/2.7.0.txt))  

you can also use the `git rebase [--no]-autostash` as well.
I think, that your workflow might be affected by how slow branch switching is in SVN. In Git, you don't need to worry about this - checkout of new branch will take fraction of second (maybe few seconds for very large projects).

The most sensible thing for you would be to work on single branch and once you will do some commits, `cherry-pick` them to other branch. Example: (let's assume that you want to work on file f.txt, which is identical on both branches)

```
$ git fetch
$ git checkout branch-1 # assuming remote branches exists already
$ vim f.txt # do some editing
$ git commit -am "f file changed"
$ git checkout branch-2
$ git cherry-pick branch-1 # <- this will pick single last commit from branch-1
                           # and apply it to branch-2

```

You are not limited to picking last commit, of course - you can pick by commit id, tag, you can use `~` operator to select commit ancestor, etc.
You can even do many cherry-picks at once by rebasing or, even nicer, interactive rebasing.

After your work is done, you need to do two separate pushes per branch (or you can change your `push.default` config option to `matching` to do one push from all local branches).