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.