Git rebase

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

Internal

Overview

git rebase reapplies commits on top of another base tip, removing the original commits. For more details on how rebasing works, and some concrete examples, see:

Git Rebasing

Options

--onto

git rebase --onto <newbase>

Starting point at which to create the new commits. If the --onto option is not specified, the starting point is <upstream> (what does that mean?). It may be any valid commit, not just an existing branch name.

--fork-point

The option that allows specifying the ancestor commit after which all commits will be rebased. Normally, this is implicitly calculated by git with:

git merge-base --fork-point <upstream> <branch>

command. If fork-point ends up being empty as result of this command, <upstream> will be used as fallback.

"fatal: No such ref:" Error

In situations like this one:

git rebase --onto develop --fork-point 17f3781e6b3cb13653b1116fe8e8823a172bc502
fatal: No such ref: '17f3781e6b3cb13653b1116fe8e8823a172bc502'

you can get around by specifying the fork point not as a hash, but as a tag.

-i

Interactive rebase.

To include a specific number of commits, going back from HEAD, use HEAD~count

rebase -i HEAD~10


To include all the commits from HEAD to, but excluding a specific commit, use:

rebase -i <commit-sha-of-the-first-commit-NOT-to-be-included>