How to Rebase to a Specific Commit in Git
This article discusses the process of rebasing to a specific commit in Git. We will use several scenarios to illustrate how this can be accomplished.
We will employ the git rebase --onto
command to rebase a branch to a specific commit. Let’s jump right in.
Rebase to a Specific Commit in Git
We use the --onto
flag when we need to rebase a branch to another branch and specify the commits.
Basic Syntax:
git rebase –onto <new-parent> <old-parent> <head-of-new-parent>
Let’s look at example scenarios.
Here is the basic workflow we will be using:
Rebase new-feature
to a Specific Commit in main
In our first scenario, we assume we wanted to use a commit in main
without rebasing the entire branch. This will require us to note the SHA-1
of the commits in play.
We can use git log <branch-name>
to get the hashes for the commits.
In our case, we want to move the commits in the new-feature
branch to the main
branch at the 846e2fa
commit (second last). We will run the following:
$ git rebase –onto 846e2fa bd9172c
The command above will have the effect shown below:
Since we wanted to move the entire new-feature
, we do not need to have a third argument in our command. Git moves the whole branch by default if you leave out the third argument.
Rebase new-feature
to a Specific Commit in main
and Remove the First Commit in new-feature
Let’s assume that our e2ff2bc
is a dependency, and we want to move our branch to main
at commit 846e2fa
, which is the same dependency we have. In plain English, we want to rebase new-feature
to main
at 846e2fa
and omit the first commit in new-feature
.
Here is how we do it:
$ git rebase –onto 846e2fa e2ff2bc
The command above would have the effect shown below:
The git rebase -onto
command takes the parent commit as a reference. In simpler terms, we are supposed to reference the commit before the commit we want to save.
Rebase new-feature
to a Specific Commit in main
and Remove the Last Commit in new-feature
Let’s say we want to move new-feature
to 846e2fa
but omit the commit d7dbeb
in new-feature
. How would we go about this?
This is where the third argument comes in. We will run the following:
$ git rebase –onto 846e2fa bd9172c 730f163
This will result to:
The third argument only points to the HEAD
of the new parent commit; in our case, we have 730f163
. This should delete the commit and all commits after it.
In a nutshell, Git allows us to rebase a branch to a specific commit. The git rebase -onto
command accepts three arguments when rebasing.
Always remember that the third argument dictates the new parent commit.
John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.
LinkedIn