Applying the changes from branch A to B, without merging or adding commits

I just had to do something similar and was able to fix it by adding --squash to the merge command

git merge --no-commit --squash branchA
git reset HEAD # to unstage the changes

cherry-pick -n should do what you want, but I'm not sure why you want the build improvements as unstaged changes - that just makes several things harder (e.g. merging other changes to the modified files, or rebasing anything).

In this example there is only one branch with build improvements, but there may be up to N branches with build improvements that I want to apply while working on a feature branch.

In that case I would create a new branch, C, which you merge from both A and B (and any other branches with build improvements). Commit changes on the feature branch, B, then merge them to the C branch, which now contains the build improvements and the feature branch changes, so you can test them together. If you need to make more changes do it in the appropriate branch, not C, then merge to C. So never change anything in the C branch, just use it to integrate changes from other branches.

That means you can use all the features of Git in branch C, instead of juggling uncommitted changes in a dirty tree.


I'm not 100% sure I understood it clearly, but in my case, I've just created diff patch between branches and then applied this patch on the B branch.

Inside branch A:

 git diff branchA..branchB > patch.diff
 git apply patch.diff