Say we have a repository with "master" and "sub" branches like below: A---B---C---D---E---F master / X---Y X---Y sub where commits A and B include changes in subdirectory "sub", commit C removes subdirectory "sub", commit D is generated by "git subtree add -P sub Y", and commits E and F also include changes in subdirectory "sub". We'd get this if we run "git subtree push -P sub . sub" on master at F: X---Y---E'--F' sub (after push) On the other hand, if we have simliar trees except that commit D is generated by "git subtree add --squash -P sub Y": A---B---C---D---E---F master / Y' X---Y sub We'd expect to get this when we run "git subtree push -P sub . sub" on master at F: X---Y---E'--F' sub (after push, expected) But actually we get this (in Git 2.22.0): A---B---C---D'--E'--F' sub (after push, actual) / X---Y This seems to be a side effect of 2.7.0 -> 2.7.1 in which a change is made to include merged branches in "git subtree push", but mistakenly causes branches before "git subtree add --squash" be included.