Git rebase

Git rebase

Git Rebase: A Powerful Way to Rewrite Commit History

Git rebase is a way to rewrite commit history by moving or modifying commits. It is often used to:

  • Keep a clean project history
  • Integrate changes from another branch
  • Edit, reorder, or squash commits

1. Understanding Rebase vs. Merge

Merge (git merge)

  • Creates a new "merge commit" that combines branches.
  • Preserves the history of both branches.
  • Can lead to a messy commit history with many merge commits.

Rebase (git rebase)

  • Moves or reapplies commits on top of another branch.
  • Keeps history linear and clean.
  • Avoids unnecessary merge commits.

Example:

git checkout feature-branch git rebase main

🔹 This moves all commits from feature-branch to the latest main.

2. Using Git Rebase

2.1 Rebasing a Feature Branch onto Main

If your feature-branch is behind main and you want to bring in the latest changes:

git checkout feature-branch git rebase main

🔹 This moves the commits from feature-branch on top of main.

If conflicts occur, resolve them and continue with:

git rebase --continue

To abort the rebase and go back:

git rebase --abort

3. Interactive Rebase (git rebase -i)

Interactive rebase lets you edit, reorder, squash, or remove commits.

3.1 Start an Interactive Rebase

git rebase -i HEAD~3

🔹 This allows you to modify the last 3 commits.

You'll see a list like this:

pick a1b2c3 First commit pick d4e5f6 Second commit pick g7h8i9 Third commit

3.2 Modify Commits

Replace pick with:

  • reword → Edit commit message
  • edit → Modify the commit
  • squash → Merge commits
  • drop → Delete the commit

Example (squashing commits):

pick a1b2c3 First commit squash d4e5f6 Second commit pick g7h8i9 Third commit

🔹 This combines the Second commit into the First commit.

After saving, Git will prompt you to update the commit message.

4. Rebasing a Remote Branch

4.1 Force Push After Rebase

Since rebase rewrites history, you must force push:

git push --force

For a safer force push:

git push --force-with-lease

🔹 This prevents overwriting commits if someone else pushed changes.

5. Undoing a Rebase

If something goes wrong during rebase:

git reflog git reset --hard ORIG_HEAD

🔹 This restores your branch to before the rebase.

Conclusion

ActionCommand
Rebase feature branch onto maingit rebase main
Start interactive rebase (last 3 commits)git rebase -i HEAD~3
Squash commits during rebaseChange pick to squash
Undo a rebasegit reset --hard ORIG_HEAD
Continue after fixing conflictsgit rebase --continue
Abort rebasegit rebase --abort

🔹 Use git rebase to keep a clean commit history! Would you like a more detailed example? 🚀

Soeng Souy

Soeng Souy

Website that learns and reads, PHP, Framework Laravel, How to and download Admin template sample source code free.

Post a Comment

CAN FEEDBACK
close