It appears the git subtree pull command may have some problems. The script below demonstrates the problem as follows: 1) Create a repo with a lib folder 2) Create another repo that uses the lib folder via git subtree push/add - the initial operation works as expected 3) Update the original lib folder as follows: modify an existing file and add a new file 4) Commit the changes reports "1 file changed, 1 insertion(+)" 5) Use git subtree push/pull - seems to work: returns message "1 file changed, 1 insertion(+)" 6) The new file is there, but the changed file is not updated The expected behavior is: git subtree pull - would merge both the updated file and the new file Actual behavior is: git subtree pull - adds the new file but does not merge changes to the existing file Have confirmed behavior on both Windows and Ubuntu. git --version is 2.17.1 in Ubuntu Here is the full Ubuntu script: clear echo Test git subtree export gitTestRoot="/home/dougc/git-test" export librepo="$gitTestRoot/librepo" export uselibrepo="$gitTestRoot/uselibrepo" echo Clean-up cd / rm -rf $gitTestRoot echo Initialize repos mkdir $gitTestRoot mkdir $librepo cd $librepo git init mkdir $uselibrepo cd $uselibrepo git init echo Add files to librepo cd $librepo echo Hi >fileInRoot.txt mkdir lib cd lib echo Mom >fileInLib.txt cd .. git add fileInRoot.txt git add lib/fileInLib.txt git commit -m "Initial files in repo with lib" echo Add files to uselibrepo cd $uselibrepo echo Excellent>file1.txt git add file1.txt git commit -m "Initial files in repo that will have lib subtree" echo Add subtree to uselibrepo cd $librepo git subtree push --prefix=lib $uselibrepo libBranch cd $uselibrepo git subtree add --prefix=lib $uselibrepo libBranch git branch -D libBranch echo Add/change files in lib cd $librepo/lib echo Dad >fileInLib.txt echo Adventure >anotherLib.txt git add anotherLib.txt git commit -m "Updates to lib in original location" echo Share changes cd $librepo git subtree push --prefix=lib $uselibrepo libBranch cd $uselibrepo git subtree pull --prefix=lib -m "Merging" $uselibrepo libBranch git branch -D libBranch echo New file is found in both places cat $librepo/lib/anotherLib.txt cat $uselibrepo/lib/anotherLib.txt echo Changed file is NOT the same in both places cat $librepo/lib/fileInLib.txt cat $uselibrepo/lib/fileInLib.txt