I have a repo with a master branch of 4 commits, then I created a new branch (b2) and made the fifth commit.
after I merged b2 to master. $ git merge b2
and I got :
Now I wanna change the order of commit 2 so I made ($ git rebase -i HEAD~5).
Then I got this result :
and the result I want is :
1-3-4-2-5(HEAD → master, b2)
Best Answer
When you rebase, the commits that you reorder change. That is because inside the commit there is a reference to the parent commit. If you reorder them, the parent commits change, so the references change and as a result, the commit themselves change. You can see this in your log, because the hashes (the 7-character codes in blue) changes for commit 4.
All downstream commits change as well, because their parent is now different. As a result, all commits downstream (more recent) change.
Your branch b2 points to a specific commit, namely 87c3249. When you rebase master, master points to a new commit (7812364), but that doesn't change b2.
If you want to fix this, run
git branch -f b2
when master is checked out. It creates a new branch at the same position as master with the name b2, and forces it (-f), meaning you remove the existing branch first.This is only a viable option if b2 and master point to the same commit. If b2 is ahead of master, you should probably create a new branch at master (let's say b3), and then cherry-pick the commits from the b2 branch that are ahead of master.
Now b3 should be ahead of master with the same commits b2 used to be ahead of master. You can now remove b2 and rename b3 to b2.