Bird
Raised Fist0
Gitdevops~20 mins

Interactive rebase (git rebase -i) - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Interactive Rebase Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What is the output of this interactive rebase command?
You run git rebase -i HEAD~3 and change the second commit's action from pick to edit. After saving and closing the editor, what happens next?
AGit applies all three commits automatically without pausing.
BGit skips the second commit and applies the first and third commits only.
CGit aborts the rebase because <code>edit</code> is not a valid action.
DGit pauses the rebase after applying the first commit and allows you to amend the second commit.
Attempts:
2 left
💡 Hint
Remember that edit pauses the rebase to let you change the commit.
🧠 Conceptual
intermediate
1:30remaining
What is the purpose of the reword command in git rebase -i?
During an interactive rebase, you see the option to change a commit's action to reword. What does this do?
AIt combines the commit with the previous one.
BIt allows you to change the commit message without modifying the commit content.
CIt pauses the rebase to let you edit the commit content.
DIt deletes the commit from the history.
Attempts:
2 left
💡 Hint
Think about changing only the commit message.
🔀 Workflow
advanced
2:30remaining
What is the correct sequence to squash the last two commits into one using interactive rebase?
You want to combine the last two commits into a single commit with a new message. Which sequence of commands and actions is correct?
A1,2,3,4
B2,1,3,4
C1,3,2,4
D3,1,2,4
Attempts:
2 left
💡 Hint
Start by telling git which commits to rebase, then mark the second commit to squash.
Troubleshoot
advanced
1:30remaining
What error occurs if you try to rebase a branch with uncommitted changes?
You run git rebase -i HEAD~3 but have uncommitted changes in your working directory. What error message will git show?
Aerror: cannot rebase: You have unstaged changes.
Berror: could not apply commit because of conflicts.
Cerror: Your local changes to the following files would be overwritten by merge.
Derror: rebase failed due to detached HEAD.
Attempts:
2 left
💡 Hint
Git protects your uncommitted changes from being overwritten during rebase.
Best Practice
expert
2:00remaining
Which practice is recommended when rewriting public commit history with git rebase -i?
You want to clean up commits on a branch that others have already pulled. What is the best practice before pushing rewritten commits?
AForce push with <code>git push --force-with-lease</code> after informing your team.
BUse <code>git push</code> normally; git will handle conflicts automatically.
CAvoid rebasing public branches; instead, create a new branch and push it.
DDelete the remote branch and push your local branch as new.
Attempts:
2 left
💡 Hint
Consider safety and communication when rewriting shared history.

Practice

(1/5)
1. What is the main purpose of using git rebase -i (interactive rebase)?
easy
A. To reorder, edit, or combine recent commits before sharing
B. To create a new branch from the current commit
C. To permanently delete the entire commit history
D. To push commits directly to the remote repository

Solution

  1. Step 1: Understand the purpose of interactive rebase

    Interactive rebase allows you to change the order, combine, edit, or remove recent commits.
  2. Step 2: Compare with other git commands

    Creating branches, deleting history, or pushing commits are different git operations.
  3. Final Answer:

    To reorder, edit, or combine recent commits before sharing -> Option A
  4. Quick Check:

    Interactive rebase = reorder/edit commits [OK]
Hint: Interactive rebase = rewrite recent commits easily [OK]
Common Mistakes:
  • Confusing rebase with branch creation
  • Thinking it deletes all history
  • Assuming it pushes commits automatically
2. Which of the following is the correct command to start an interactive rebase for the last 3 commits?
easy
A. git rebase -i HEAD^^3
B. git rebase -i HEAD~3
C. git rebase -i HEAD~
D. git rebase -i HEAD^3

Solution

  1. 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.
  2. Step 2: Check the options

    HEAD^3 and HEAD^^3 are invalid for this purpose; HEAD~ alone is incomplete.
  3. Final Answer:

    git rebase -i HEAD~3 -> Option B
  4. Quick Check:

    HEAD~3 selects last 3 commits [OK]
Hint: Use HEAD~N to select last N commits for rebase [OK]
Common Mistakes:
  • Using HEAD^3 instead of HEAD~3
  • Omitting the number after ~
  • Using double carets ^^ incorrectly
3. Given the following interactive rebase todo list:
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?
medium
A. Only Commit C will be applied, others dropped
B. Commits A and B will be combined, Commit C will be last
C. The rebase will fail due to invalid order
D. Commits B and C will be combined, and Commit A will be last

Solution

  1. Step 1: Understand 'pick' and 'squash' in rebase

    'pick' applies a commit as is; 'squash' combines the commit with the previous one.
  2. Step 2: Analyze the new order

    Commit B is picked first, Commit C is squashed into B, Commit A is picked last.
  3. Final Answer:

    Commits B and C will be combined, and Commit A will be last -> Option D
  4. Quick Check:

    squash merges commits; order changed [OK]
Hint: Squash merges commit into previous one in order [OK]
Common Mistakes:
  • Thinking squash drops commits
  • Assuming order stays same after rebase
  • Confusing squash with fixup
4. You run 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?
medium
A. Make changes, then run git commit --amend and git rebase --continue
B. Run git push immediately to update remote
C. Abort the rebase with git rebase --abort
D. Run git reset --hard HEAD~1 to undo the commit

Solution

  1. Step 1: Understand 'edit' in interactive rebase

    When a commit is marked 'edit', rebase pauses to let you change it.
  2. Step 2: Modify commit and continue rebase

    You make changes, amend the commit with git commit --amend, then continue with git rebase --continue.
  3. Final Answer:

    Make changes, then run git commit --amend and git rebase --continue -> Option A
  4. Quick Check:

    Edit = amend commit + continue rebase [OK]
Hint: Edit commit: amend changes, then continue rebase [OK]
Common Mistakes:
  • Pushing before finishing rebase
  • Aborting instead of continuing
  • Resetting commits incorrectly
5. You want to clean up your last 4 commits by combining the second and third commits into one, and also reorder commits so the last commit becomes the first. Which interactive rebase todo list correctly achieves this?
pick 111aaa Commit 1
pick 222bbb Commit 2
pick 333ccc Commit 3
pick 444ddd Commit 4
hard
A.
pick 444ddd Commit 4
squash 222bbb Commit 2
pick 333ccc Commit 3
pick 111aaa Commit 1
B.
pick 444ddd Commit 4
pick 111aaa Commit 1
squash 222bbb Commit 2
pick 333ccc Commit 3
C.
pick 444ddd Commit 4
pick 111aaa Commit 1
pick 222bbb Commit 2
squash 333ccc Commit 3
D.
pick 111aaa Commit 1
pick 333ccc Commit 3
squash 222bbb Commit 2
pick 444ddd Commit 4

Solution

  1. Step 1: Reorder commits to put last commit first

    Commit 4 (444ddd) should be first in the list to reorder it first.
  2. 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.
  3. 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.
  4. Final Answer:

    pick 444ddd Commit 4
    pick 111aaa Commit 1
    pick 222bbb Commit 2
    squash 333ccc Commit 3
    -> Option C
  5. Quick Check:

    Reorder + squash =
    pick 444ddd Commit 4
    pick 111aaa Commit 1
    pick 222bbb Commit 2
    squash 333ccc Commit 3
    [OK]
Hint: Put last commit first, squash 3rd into 2nd commit [OK]
Common Mistakes:
  • Squashing commits in wrong order
  • Not moving last commit to first position
  • Using squash on wrong commits