I have two branches off of master, each one for a different feature, and then I have a synthesis branch that combines the two. I committed something to the synthesis branch, but now I see I would have rather applied that change to one of the branches particular to that feature. Is there a way to do this unapply/apply somewhere else maneuver with git?
views:
95answers:
2
+5
A:
Cherry-pick commit to target branch and reset source branch. Assuming, you want to move the latest commit from source
branch to target
, do:
git checkout target
git cherry-pick source
git checkout source
git reset --hard source^
If the commit wasn't the last, you will have to use git rebase -i
instead of the last command and choose specific commit name for your cherry-pick
.
Pavel Shved
2009-11-20 23:00:20
Thanks! Works great.
kaleidomedallion
2009-11-20 23:15:53
Note that reset / rebase both do **history rewriting**, so they should not be used if the history was published - then you would have to use git-revert instead.
Jakub Narębski
2009-11-21 00:48:36
A:
Generally, when I do something like this, I will:
- Create a reverse patch file using git diff (e.g.
git diff HEAD^ HEAD
) - Apply this reverse patch to the branch I want to remove the change from.
- Check out the branch I DO want the change on
- Use
git cherry-pick
to apply the applicable commit
I believe there is an easier way, but I prefer this since I use (and remember) the diff/cherry-pick commands better
Rob Di Marco
2009-11-20 23:00:44