Back to Git & Dev Tools
2026-05-016 min read

Using Git rebase on the command line (Git & Dev Tools)

Learn Using Git rebase on the command line (Git & Dev Tools) step by step with clear examples and exercises.

Title: Mastering Git Rebase on the Command Line (Git & Dev Tools)

Why This Matters

In this comprehensive lesson, we'll delve into using Git rebase on the command line, a powerful feature that streamlines your development workflow by allowing you to combine or squash commits, fix mistakes, and keep your project history tidy. Whether you're preparing for an interview, working on a collaborative project, or just maintaining your own codebase, mastering Git rebase will save you time and make your life easier.

Prerequisites

Before diving into the core concept of using Git rebase, ensure you have a good understanding of the following topics:

  1. Git Basics
  • Familiarity with Git commands such as clone, add, commit, push, pull, and status.
  • Understanding Git branches and merging.
  • Knowledge of common Git workflows (e.g., feature branch workflow).
  1. Command Line Interface
  • Navigating the file system using commands like cd, ls, and pwd.
  • Editing files using command-line text editors such as vi or nano.

Core Concept

Git rebase is a command that allows you to move or combine commits in your project's history. By doing so, you can create cleaner, more linear commit histories and make it easier to collaborate with others. In this section, we'll cover the essential steps for using Git rebase on the command line, as well as some advanced techniques.

  1. Preparing to Rebase

Before starting a rebase, ensure you have committed all your changes and switched to the branch you want to rebase. For example:

git checkout my-branch
git add .
git commit -m "Prepare for rebase"
  1. Starting a Rebase

To start a rebase, use the git rebase command followed by the name of the branch you want to base your changes on:

git rebase master

This will open an interactive session where you can choose which commits to include in your new history.

  1. Interactive Rebase

In the interactive rebase session, Git presents you with a list of commits and allows you to perform various actions on them, such as:

  • pick (continue with this commit)
  • reword (edit the commit message)
  • edit (modify the changes in the commit)
  • squash (combine this commit with the next one)
  • fixup (combine this commit with the next one and discard the commit message)
  • drop (remove this commit from the history)

To interact with a commit, navigate to its line using the arrow keys and make your desired selection. Once you're done, press Enter to continue.

  1. Advanced Rebase Techniques
  • Rebasing onto a specific commit: To rebase onto a specific commit, use the git rebase command.
  • Interactive reword: Use the r command during an interactive rebase to edit the commit message without squashing or modifying the changes in the commit.
  • Skip a commit: During an interactive rebase, you can skip a commit by using the skip command.
  • Amend a commit: If you need to add more changes to your most recent commit during a rebase, use the git rebase --amend command.
  1. Finishing the Rebase

After making all your selections, Git will present you with one final prompt:

If you have any changes left in your working directory, please stash them before you can continue.

If you have uncommitted changes, stash them using git stash and then continue with the rebase. Once you've addressed any issues, complete the rebase by typing:

git rebase --continue
  1. Cleaning Up

If you've created any extra commits during the rebase process (e.g., squashed or fixup commits), you can clean them up using git rebase --clean-up:

git rebase --clean-up

Worked Example

Let's walk through a worked example to illustrate the process of using Git rebase on the command line. Suppose you have the following commit history:

A - B - C - D - E (master)
\
F - G - H (my-branch)

You decide that commits F, G, and H should be combined into a single commit, and you want to move them onto the master branch. Here's how to do it:

  1. Switch to your branch:
git checkout my-branch
  1. Start the rebase:
git rebase master
  1. In the interactive session, navigate to commit F and choose squash:
pick F
squash G
pick H
  1. Edit the combined commit message:
1) abcdefg (Squashed commit)

This is the combined commit message for commits F, G, and H.


5. Save and exit the editor, then continue the rebase:

git rebase --continue


6. Complete the rebase:

git rebase --clean-up


Now your commit history looks like this:

A - B - C - D - E (master)

\

Squashed commit (my-branch)

Common Mistakes

  1. Forgetting to switch branches
  • Make sure you've switched to the correct branch before starting a rebase.
  • If you forget, you can use git checkout to switch to the desired branch and start the rebase again.
  1. Having uncommitted changes
  • Before starting a rebase, make sure all your changes are committed or stashed.
  • If you have uncommitted changes, Git will warn you and force you to commit or stash them before continuing.
  1. Not saving changes during an interactive rebase
  • If you modify a commit during an interactive rebase, don't forget to save and exit the editor before continuing.
  • If you forget, Git will ask you to do so again.
  1. Rebasing onto an incorrect base branch
  • Make sure you've selected the correct base branch for your rebase.
  • If you accidentally choose the wrong base branch, you can use git rebase --abort to abort the rebase and start over.
  1. Creating a messy commit history
  • Be mindful of how you're using squash and fixup during an interactive rebase.
  • Using these commands too liberally can create a confusing commit history, so it's important to keep the number of squashed or fixup commits to a minimum.

Practice Questions

  1. You have a feature branch with several commits that need to be moved onto the master branch. How would you use Git rebase to accomplish this?
  2. Suppose you've made a mistake in your most recent commit and want to revert it using Git rebase. What steps should you follow?
  3. You have a long-running feature branch with many commits, and you want to squash them into a single commit with a clear, concise message. How would you do this using Git rebase?
  4. During an interactive rebase, you've made changes to a commit but forgot to save and exit the editor before continuing. What should you do now?
  5. You want to rebase your feature branch onto a specific commit that is several commits ahead of your current position in the base branch. How would you do this using Git rebase?

FAQ

  1. Can I use Git rebase on multiple branches at once?
  • No, Git rebase operates on a single branch at a time. You can, however, use git merge to combine changes from one branch into another.
  1. What happens if I have conflicts during a rebase?
  • If there are any conflicts during a rebase, Git will pause the process and allow you to resolve them manually before continuing.
  1. Can I undo a Git rebase?
  • Yes, you can use git reflog to recover a previous version of your branch after a rebase. However, it's best to avoid undoing a rebase if possible, as it can create complex merge conflicts and make your commit history difficult to understand.
  1. How do I revert a specific commit using Git rebase?
  • To revert a specific commit during an interactive rebase, navigate to the commit in question and choose drop. This will remove the commit from the history.
  1. What is the difference between squash and fixup during an interactive rebase?
  • Squash combines the current commit with the next one and allows you to edit the combined commit message. Fixup, on the other hand, combines the current commit with the next one but discards the commit message of the current commit.
Using Git rebase on the command line (Git & Dev Tools) | Git & Dev Tools | XQA Learn