git-subtree pull complications
I've been experiencing the same error Can't squash-merge: 'foo' was never added.
with sourcetree 1.7.0 whenever I do a pull on a subtree.
However, I believe my case is different because I'm using subdirectories.
Sourcetree does something as follows:git -c diff.mnemonicprefix=false -c core.quotepath=false subtree pull -P dir1\subdir1 --squash remote-repo master
And obviously, if we were to try it again in Git Bash (Git version 2.6.1.windows.1), it would be:git subtree pull -P "dir1\subdir1" --squash remote-repo master
However that failed. The following also failed although the command syntax is fine:git subtree pull -P dir1/subdir1 --squash remote-repo master
The solution I found to make it work is to use Git Bash with the following command:git subtree pull -P "dir1/subdir" --squash remote-repo master
I guess that there is still some work to be done for Git's command-line processing engine.
I had the same problem, and in my case it seems to be due to the initial subtree commit being merge-squashed into the master branch.
Looking through the subtree source I found this: https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh#L224
It looks like subtree greps your git log for git-subtree-dir: foo
but doesn't find a suitable commit. Try git log --grep="git-subtree-dir: foo/*\$"
, and if there's something weird with that commit, such as it being a merge commit, that could be the issue.
Just pulling without squashing worked for me, apart from the annoying merge conflicts. I did that in a temporary branch which I then git merge --squash
ed into another branch to avoid a messier history. It could've been rebased instead too of course.