Bird
Raised Fist0
Gitdevops~5 mins

Squashing commits in Git - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What does 'squashing commits' mean in Git?
Squashing commits means combining multiple commits into one to make the history cleaner and easier to understand.
Click to reveal answer
beginner
Which Git command is commonly used to squash commits?
The command 'git rebase -i' (interactive rebase) is used to squash commits by editing the commit list.
Click to reveal answer
beginner
What is the main benefit of squashing commits before merging a feature branch?
It keeps the main branch history clean and easier to read by combining many small changes into one meaningful commit.
Click to reveal answer
intermediate
In an interactive rebase, what keyword do you replace 'pick' with to squash a commit?
You replace 'pick' with 'squash' or 's' to combine that commit with the previous one.
Click to reveal answer
intermediate
True or False: Squashing commits changes the commit history and can affect shared branches.
True. Squashing rewrites history, so it should be done carefully, especially if the branch is shared with others.
Click to reveal answer
What is the purpose of squashing commits in Git?
ATo combine multiple commits into one for a cleaner history
BTo delete commits permanently
CTo create a new branch
DTo push commits to remote
Which command starts an interactive rebase to squash commits?
Agit merge --squash
Bgit commit --amend
Cgit rebase -i
Dgit reset --hard
During interactive rebase, which keyword do you use to squash a commit?
Afixup
Bedit
Cdrop
Dsquash
What should you be careful about when squashing commits on a shared branch?
AIt rewrites history and can confuse collaborators
BIt can cause merge conflicts
CIt deletes the branch
DIt disables pushing
What happens to commit messages when you squash commits?
AThey are all deleted
BYou can combine and edit them into one message
CThey remain separate
DThey are automatically replaced with the first commit message
Explain the process of squashing commits using interactive rebase in Git.
Think about editing commits in a list and merging them.
You got /4 concepts.
    Why is it important to squash commits before merging a feature branch into the main branch?
    Consider how commit history looks to others.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of squashing commits in Git?
      easy
      A. To revert the last commit without changing history
      B. To combine multiple commits into one for a cleaner history
      C. To create a new branch from the current commit
      D. To delete all commits from the repository

      Solution

      1. Step 1: Understand commit history management

        Squashing is used to combine several commits into a single commit to simplify the commit history.
      2. Step 2: Identify the purpose of squashing

        This helps keep the project history clean and easier to read by reducing clutter from many small commits.
      3. Final Answer:

        To combine multiple commits into one for a cleaner history -> Option B
      4. Quick Check:

        Squashing = combine commits [OK]
      Hint: Squash = combine commits to clean history [OK]
      Common Mistakes:
      • Thinking squashing deletes commits permanently
      • Confusing squashing with branching
      • Believing squashing reverts commits
      2. Which Git command starts an interactive rebase to squash commits?
      easy
      A. git commit --squash HEAD~3
      B. git merge -i HEAD~3
      C. git rebase -i HEAD~3
      D. git reset --soft HEAD~3

      Solution

      1. Step 1: Identify the command for interactive rebase

        The command to start an interactive rebase is git rebase -i followed by the commit range.
      2. Step 2: Confirm the correct syntax

        git rebase -i HEAD~3 opens the last 3 commits for editing, allowing squashing.
      3. Final Answer:

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

        Interactive rebase = git rebase -i [OK]
      Hint: Use git rebase -i to start squashing commits [OK]
      Common Mistakes:
      • Using git merge -i which does not exist
      • Trying git commit --squash which is invalid
      • Confusing reset with rebase for squashing
      3. Given these commits:
      commit1: Add README
      commit2: Fix typo
      commit3: Update README formatting
      If you run git rebase -i HEAD~3 and squash commit2 and commit3 into commit1, what will the commit history show?
      medium
      A. One commit combining messages from commit1, commit2, and commit3
      B. Three separate commits unchanged
      C. One commit with message from commit1 only
      D. Two commits: commit1 and combined commit2+commit3

      Solution

      1. Step 1: Understand squash behavior in interactive rebase

        Squashing merges commits into one, combining their changes and commit messages.
      2. Step 2: Result of squashing commit2 and commit3 into commit1

        The final commit will include all changes and combined commit messages from all three commits.
      3. Final Answer:

        One commit combining messages from commit1, commit2, and commit3 -> Option A
      4. Quick Check:

        Squash merges commits and messages [OK]
      Hint: Squash merges commits and their messages together [OK]
      Common Mistakes:
      • Assuming only the first commit message remains
      • Expecting commits to stay separate after squash
      • Thinking squash deletes commit messages
      4. You ran git rebase -i HEAD~4 to squash commits but got a conflict error. What should you do next?
      medium
      A. Manually fix the conflicts, then run git rebase --continue
      B. Abort the rebase with git rebase --abort and try again
      C. Run git reset --hard to discard all changes
      D. Push your changes immediately to remote to fix conflicts

      Solution

      1. Step 1: Understand conflict during rebase

        A conflict means Git needs you to fix code differences manually before continuing.
      2. Step 2: Resolve conflicts and continue rebase

        Fix the conflicts in files, then run git rebase --continue to proceed with squashing.
      3. Final Answer:

        Manually fix the conflicts, then run git rebase --continue -> Option A
      4. Quick Check:

        Fix conflicts + git rebase --continue [OK]
      Hint: Fix conflicts manually then git rebase --continue [OK]
      Common Mistakes:
      • Aborting rebase without trying to fix conflicts
      • Using git reset --hard which discards work
      • Pushing incomplete changes to remote
      5. You squashed commits locally and want to update the remote branch. What is the correct command to push your changes safely?
      hard
      A. git push --all origin
      B. git push origin main
      C. git push --no-verify origin main
      D. git push --force-with-lease origin main

      Solution

      1. Step 1: Understand effect of squashing on commit history

        Squashing rewrites commit history, so the remote branch history differs from local.
      2. Step 2: Use force push safely

        To update remote with rewritten history, use git push --force-with-lease to avoid overwriting others' work accidentally.
      3. Final Answer:

        git push --force-with-lease origin main -> Option D
      4. Quick Check:

        Force push safely after squash [OK]
      Hint: Use git push --force-with-lease after squash [OK]
      Common Mistakes:
      • Using normal git push causing rejection
      • Using --no-verify which skips hooks but not force push
      • Pushing all branches unnecessarily