Git Rebase

How can you do git rebase?

I wrote 2 articles about git: What is git and Git usage. There are basic information about git. Today I would like to do something more advanced. Last week I did quick presentation/lighting talk about git rebase. After that I realize that this is good topic to do short note. So, there you have.

When we use git, we have two ways to pull new changes from remote repository. Merge and rebase. When we use merge (this is default option) git will try resolve conflicts and put our changes between changes of others in our team (using timeline to this). But when we use rebase, git move our local changes to temporary area and pull all changes from remote repository. Then one by one will move each our local change to branch but on top of all downloaded changes. We say that rebase move your local changes on top of HEAD. We can say that HEAD is something like marker which version is current. When on remote repository are new changes and we don't have this changes locally we say that we are behind the HEAD. So when we pull all changes from remote repository we are on HEAD.

Ok, let's move now to visual difference between those two method.

Merge

You can see that even someone do some connected commits, after merge all is one big mess. Even more, we see that there are also commits with title merge and we didn't create this commits.

Rebase

Here everything is in order. Connected commits are in one group. We also see history of our branches.

How we can do this when our code is only locally?

  1. Switch to develop branch

    git checkout develop
    
  2. Download all changes locally

    git pull
    
  3. Switch to specific branch (branch on which you work)

    git checkout my-branch
    
  4. Do rebase

    git rebase develop
    
  5. Push changes to remote repository

    git push
    

Sometimes when you use rebase, then it can show some conflicts. You need to resolved them and add changes. Then you can continue rebase.

git rebase develop
# resolve conflicts
git add -u # add all changes
git rebase --continue

We need to talk about one more thing. Sometimes we have our code on remote repository and after rebase we cannot do git push. In this case we can use:

git push -f origin my-branch

But! You need to be very careful. This command will override all history of change on remote repository for your branch. You must be sure that you don't lose any change. If you work on branch alone, it is safe but when you work on branch with others you need to be sure what you doing.

If you like to abort rebase. You can do that in this way.

git rebase --abort

This is it. I showed you how you can use git rebase. I hope this is useful for you. If you have any question or suggestion please let me know in comments. See you next time! Bye!