I want to combine a subtree merge into a regular (non-merge) commit. I currently do this by first performing the subtree merge, then amending this with the regular changes.
git merge --strategy subtree --strategy-option subtree=subdir $subdir_parent
# stage changes
git commit --amend -m "message"
Is it possible to perform this operation using only plumbing commands? In the commit generated by git merge
, I see no indication of this being a subtree merge commit. When I pass $subtree_parent
as the second parent to git commit-tree
, the resulting commit fails to include the changes of $subtree_parent
.
PS. Are there any objections to adding changes to a merge commit that have nothing to do with the merge?
EDIT I think I understand now. Is it simply the tree of the merge commit that determines how the subtree was merged in? Meaning a subtree of the tree equals the top tree of the second parent.
Oops. This was just the result of me being confused about how git works. The tree passed to
git commit-tree
should of course reflect the situation after the merge. I was feeding it the tree without changes to the subdir folder. Simply creating a merge commit usinggit commit-tree
does not magically perform the merge!