Okay. If I'm on a branch (say working
), and I want to merge in the changes from another branch (say master
), then I run the command git-merge master
while on the working
branch, and the changes get merged in without rebasing the history at all. If I run git-rebase master
, then the changes in master
are rebased to be put on the top of my working
branch. But what if I want to merge in the changes from master
but rebase my changes in working
to be on top? How do I do that? Can it be done?
I could run git-rebase working
on my master
branch to put my changes on top in the master
branch, but I'd like to be able to do that in my working
branch, and I have no idea how. The closest that I can think of doing is creating a new branch from master
and then rebase working
's changes on top of that, but then I'd have a new branch instead of altering the working
branch.
You've got what
rebase
does backwards.git rebase master
does what you're asking for — takes the changes on the current branch (since its divergence from master) and replays them on top ofmaster
, then sets the head of the current branch to be the head of that new history. It doesn't replay the changes frommaster
on top of the current branch.Another way to look at it is to consider
git rebase master
as:Here , '
master
' is the upstream branch, and that explain why, during a rebase,ours
andtheirs
are reversed.I've just done this moments ago in the following way:
git checkout -b work-in-progress
git fetch origin/master
git reset --hard origin/master
git rebase origin/master
git rebase origin/work-in-progress
git rebase origin/master