Here's a simple example on a repository with three branches, where we'll be adding images-annex as a subtree into master.

$ git branch
    git-annex
    images-annex
  * master
$ git subtree add --squash --prefix=images/ images-annex
  Added dir 'images'
$ ls
  FILE_A        FILE_B        images/

...checkout images-annex, make changes, commit...

$ git checkout master
$ git subtree pull --squash --prefix=images/ . images-annex
  From .
  * branch images-annex -> FETCH_HEAD
  Merge made by the 'recursive' strategy.
  ...(files created/modified/etc)

I have tried a few different methods for merging the subtree in and so far have not been able to keep git-annex links up to date. Running git-annex fix . does what it's supposed to but then git sees everything as modified. Is this entirely the expected behavior because of the --prefix? I have not used subtrees much before but the model appears to be very helpful for what I'm trying to do.