What if you could rewrite your project history like editing a simple list, making it perfect before anyone else sees it?
Why Interactive rebase (git rebase -i)? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you have a messy stack of handwritten notes with mistakes and unclear order. You want to organize them neatly before sharing with friends, but you have to rewrite everything from scratch each time you want to fix a small error or reorder the notes.
Manually fixing commit history by creating new commits or undoing changes is slow and confusing. It's easy to make mistakes, lose track of changes, or end up with a cluttered history that's hard to understand later.
Interactive rebase lets you pause, reorder, combine, or edit commits easily in one place. It's like having a magic notebook where you can rearrange and polish your notes perfectly before sharing, without losing any information.
git commit --amend
# then create new commits to fix order or mistakesgit rebase -i HEAD~3 # reorder, squash, or edit commits interactively
You can create a clean, clear, and meaningful project history that everyone can understand and trust.
A developer finishes a feature with several small fixes and typos in commits. Using interactive rebase, they combine and reorder commits into a single clear update before pushing to the shared project.
Manual commit fixes are slow and error-prone.
Interactive rebase lets you edit commit history easily.
It helps keep project history clean and understandable.
Practice
git rebase -i (interactive rebase)?Solution
Step 1: Understand the purpose of interactive rebase
Interactive rebase allows you to change the order, combine, edit, or remove recent commits.Step 2: Compare with other git commands
Creating branches, deleting history, or pushing commits are different git operations.Final Answer:
To reorder, edit, or combine recent commits before sharing -> Option AQuick Check:
Interactive rebase = reorder/edit commits [OK]
- Confusing rebase with branch creation
- Thinking it deletes all history
- Assuming it pushes commits automatically
Solution
Step 1: Recall the syntax for interactive rebase
The correct syntax uses HEAD~N to specify the last N commits, so HEAD~3 means last 3 commits.Step 2: Check the options
HEAD^3 and HEAD^^3 are invalid for this purpose; HEAD~ alone is incomplete.Final Answer:
git rebase -i HEAD~3 -> Option BQuick Check:
HEAD~3 selects last 3 commits [OK]
- Using HEAD^3 instead of HEAD~3
- Omitting the number after ~
- Using double carets ^^ incorrectly
pick a1b2c3 Commit A pick d4e5f6 Commit B pick 789abc Commit C
If you change it to:
pick d4e5f6 Commit B squash 789abc Commit C pick a1b2c3 Commit A
What will happen after completing the rebase?
Solution
Step 1: Understand 'pick' and 'squash' in rebase
'pick' applies a commit as is; 'squash' combines the commit with the previous one.Step 2: Analyze the new order
Commit B is picked first, Commit C is squashed into B, Commit A is picked last.Final Answer:
Commits B and C will be combined, and Commit A will be last -> Option DQuick Check:
squash merges commits; order changed [OK]
- Thinking squash drops commits
- Assuming order stays same after rebase
- Confusing squash with fixup
git rebase -i HEAD~2 and change the second commit's action from pick to edit. After saving, what should you do next to modify that commit?Solution
Step 1: Understand 'edit' in interactive rebase
When a commit is marked 'edit', rebase pauses to let you change it.Step 2: Modify commit and continue rebase
You make changes, amend the commit withgit commit --amend, then continue withgit rebase --continue.Final Answer:
Make changes, then run git commit --amend and git rebase --continue -> Option AQuick Check:
Edit = amend commit + continue rebase [OK]
- Pushing before finishing rebase
- Aborting instead of continuing
- Resetting commits incorrectly
pick 111aaa Commit 1 pick 222bbb Commit 2 pick 333ccc Commit 3 pick 444ddd Commit 4
Solution
Step 1: Reorder commits to put last commit first
Commit 4 (444ddd) should be first in the list to reorder it first.Step 2: Combine second and third commits
To combine commits 2 and 3, use 'pick' on commit 2 and 'squash' on commit 3 immediately after.Step 3: Verify the todo list
pick 444ddd Commit 4 pick 111aaa Commit 1 pick 222bbb Commit 2 squash 333ccc Commit 3
places commit 4 first, then commit 1, then picks commit 2 and squashes commit 3, matching requirements.Final Answer:
pick 444ddd Commit 4 pick 111aaa Commit 1 pick 222bbb Commit 2 squash 333ccc Commit 3
-> Option CQuick Check:
Reorder + squash =pick 444ddd Commit 4 pick 111aaa Commit 1 pick 222bbb Commit 2 squash 333ccc Commit 3
[OK]
- Squashing commits in wrong order
- Not moving last commit to first position
- Using squash on wrong commits
