In part I we went through how to use git rebase to modify commit history, things like reword a commit, squash multiple commits, split commit. In this part, we will talk about another common use case of rebase: rebase before merging branches.
Let’s first create a new repo and add one
file.txt as the first commit.
apple pear peach cat dog snake
Now we create a
feature branch from
master branch. To create a new branch, press
c(Checkout new branch).
Now that we are on the
feature branch, lets add a new file
file2.txt with the folloing content:
TODOs: 1. Go to supermarket 2. Pick up dog
Commit the changes with message
Then let’s modify the
file.txt to the following:
apple pear peach cat dog pig
Then commit with the message
change snake to pig.
Now let’s switch back to
To make things more interesting, let’s also modify the
file.txt to replace
panda, then commit.
To recap, now the history looks like this:
Note that the last commits in
feature are conflicting each other.
Suppose now the
feature branch has finished, and we want to merge it back to
First, let’s rebase it against master.
feature, and press
e(elsewhere) and choose
master. Since there is conflict, Magit will show the following page indicating that we have to solve the conflicts.
This is as we expected, let’s now use the
Ediff dwimming(do what I mean) to resolve the conflict. Put the cursor on the conflicting file, and press
Now we are entering the
Let’s say that we decided to take the changes in
feature branch, then we can press
n to select the diff, and
b to choose variant B. If everything goes right, we should see that the C Section should now contain the correct text.
q to quit
Ediff and also choose save the file when prompted.
Now we should be back at the main Magit screen, press
g to refresh should show the following.
Looks everything is good, we can press
r and continue rebasing.
After done, the log should show the following:
See that now the history looks very clean and as if changes were done in a linear fashion.