To start with, we are going to perform a very simple rebase where we will introduce a new file, commit this file, make a change to it, and then commit it again so that we end up with 2 new commits.
Before we start, we need a repository to work in. You can use a previous clone of jgit
, but to get a close to identical output from the example, you can clone the jgit
repository.
The jgit
repository can be cloned as follows:
$ git clone https://git.eclipse.org/r/jgit/jgit chapter4 $ cd chapter4
We start by creating a local branch and then make two commits by performing the following steps; these are the commits that we want to rebase onto another branch:
rebaseExample
, that tracks origin/stable-3.1
:$ git checkout -b rebaseExample --track origin/stable-3.1 Branch rebaseExample set up to track remote branch stable- 3.1 from origin. Switched to a new branch 'rebaseExample'
rebaseExample
branch as follows:$ echo "My Fishtank Gravel, water, plants Fish, pump, skeleton" > fishtank.txt $ git add fishtank.txt $ git commit -m "My brand new fishtank" [rebaseExample 4b2c2ec] My brand new fishtank 1 file changed, 4 insertions(+) create mode 100644 fishtank.txt $ echo "mosquitos" >> fishtank.txt $ git add fishtank.txt $ git commit -m "Feeding my fish" [rebaseExample 2132d88] Feeding my fish 1 file changed, 1 insertion(+)
origin/stable-3.2
branch instead.$ git rebase origin/stable-3.2 First, rewinding head to replay your work on top of it... Applying: My brand new fishtank Applying: Feed the fish
When you execute git rebase
, Git starts by finding the common ancestor of the current HEAD
branch and the branch you want to rebase to. When Git finds merge-base
, it will find the commits that are not available on the branch you are rebasing onto. Git will simply try to apply those commits one by one.