Caution on Rebase : How Come That Unexpected Commit?
I love rebase, and has it as a prefered way to ensure that the code is synced between people in my team. Rebase, may be hard for someone, but once you understand its mechanism, it makes a lot of sense and returns to you the beautiful and maintainable code.
Today, I would like to demonstrate one use case when rebase may introduce you the unexpected commit.
Consider this repository:
feature/webboard branch is not up to date as there is one commit ahead in
branch. By taking the rebase as a sync strategy, you have to update
checking it out, then use
git rebase master
Every things look fine. However, you soon realize that the commit
3294a70 is not needed.
Thus, you go back to
master branch and do
git reset --hard HEAD~1 and have that commit
Again, when the parent branch is changed, you have to rebase your feature branch accordingly. Here,
we need to rebase
It is sure that the rebase will be passed without any conflict, as
is already on top of
master. Unless you come back to look at the result tree.
3294a70 is still there!!! How come!?!?! you already rebase your branch with
master. This commit should disappear!
Thing will go worst if you did not take a look at the tree and merge
master right away.
Many people do merging in a reckless manner and then end up having this problem.
Let’s come back to the question. Why does
3294a70 is still there? To answer this, you have to
look back on
feature/webboard when it is first rebased. As rebase means to reset your branch
on to the parent branch, and re-apply the commits in the branch again. Thus,
a part of
feature/webboard’s commits. When
3294a70 is removed from
is still kept by
feature/webboard. So when
feature/webboard is rebased again,
re-apply as a member of
This problem can be solve by carefully watching at the result tree everytimes the rebase occur. It
is not hard to spot, and once you spot it, you can simply use
git rebase -i to remove such
Remember, git is not hard as long as you know what you are doing and what are going on according to each action. By caring the result of your tree all the time, this problem can be prevented.