git apply changes from one commit onto another branch

I want to do something similar to git rebase but without collapsing parallel commits.

Let's say I have the following commits:

  B (bar)
 /
A-C-D (foo)

Now I want to take the changes that D introduced to C in branch foo, and apply them to B in branch bar. so that I end up with the following:

  B-E (bar)
 /
A-C-D (foo)

Where the difference between commits B and E is equal to difference between commits C and D. Is this possible? Is there a way to do it without creating a patch?


Solution 1:

Yes:

git checkout -b mergebranch B
git cherry-pick D

Solution 2:

In my case I needed to apply the changes of specific commits of another branch. I did that by cherry picking them like so: git cherry-pick COMMIT-HASH.

Solution 3:

If the last commit on the branch that you want to cherry-pick out of (foo in the example) is a merge commit, you can point at the specific commit to cherry pick by using git cherry-pick branchname~1 to get the commit which was the parent of the merge.