Bird
Raised Fist0
Gitdevops~20 mins

Three-way merge in Git - 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
🎖️
Three-way Merge Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Understanding the base in a three-way merge
In a three-way merge, what role does the 'base' commit play?
AIt is the latest commit on the target branch after the merge is complete.
BIt is the commit that is discarded during the merge process.
CIt is the commit that contains the merge conflict markers.
DIt is the common ancestor of the two branches being merged, used to identify changes.
Attempts:
2 left
💡 Hint
Think about what helps Git compare changes from two branches.
💻 Command Output
intermediate
2:00remaining
Output of a three-way merge conflict
What output does Git produce when a three-way merge results in a conflict?
Git
git merge feature-branch
AAlready up to date.
BAuto-merging file.txt\nCONFLICT (content): Merge conflict in file.txt\nAutomatic merge failed; fix conflicts and then commit the result.
Cerror: pathspec 'feature-branch' did not match any file(s) known to git
DMerge made by the 'recursive' strategy.\n file.txt | 2 ++\n 1 file changed, 2 insertions(+)
Attempts:
2 left
💡 Hint
Look for messages indicating conflicts.
🔀 Workflow
advanced
3:00remaining
Steps to resolve a three-way merge conflict
Which sequence correctly describes the steps to resolve a three-way merge conflict in Git?
A1,2,3,4
B2,1,3,4
C1,3,2,4
D3,1,2,4
Attempts:
2 left
💡 Hint
Think about the logical order from detecting conflicts to finishing the merge.
Troubleshoot
advanced
2:00remaining
Cause of repeated merge conflicts in a three-way merge
You keep getting the same merge conflicts every time you try to merge a feature branch into main. What is the most likely cause?
AYou did not stage the resolved files before committing the merge.
BThe feature branch was deleted before merging.
CYou merged the branches in the wrong order.
DThe base commit is missing from the repository.
Attempts:
2 left
💡 Hint
Think about what happens if Git does not see your conflict resolutions.
Best Practice
expert
2:30remaining
Best practice to minimize three-way merge conflicts
Which practice best helps reduce the chance of complex three-way merge conflicts in a team project?
AUse force push to overwrite remote branches regularly.
BAvoid committing changes until the feature is fully complete.
CFrequently pull and merge changes from the main branch into your feature branch.
DDelete the main branch and work only on feature branches.
Attempts:
2 left
💡 Hint
Think about keeping your branch up to date with others' changes.

Practice

(1/5)
1. What is the main purpose of a three-way merge in Git?
easy
A. To combine changes from two branches using a common base
B. To delete a branch after merging
C. To create a new branch from the current branch
D. To reset the current branch to a previous commit

Solution

  1. Step 1: Understand the concept of three-way merge

    A three-way merge uses the common ancestor of two branches to combine their changes safely.
  2. Step 2: Identify the purpose in Git workflow

    This process helps merge changes from two branches without losing work, especially when both branches have edits.
  3. Final Answer:

    To combine changes from two branches using a common base -> Option A
  4. Quick Check:

    Three-way merge = combine changes safely [OK]
Hint: Three-way merge combines two branches with a common ancestor [OK]
Common Mistakes:
  • Confusing merge with branch deletion
  • Thinking merge creates new branches
  • Mixing merge with reset commands
2. Which Git command automatically performs a three-way merge when integrating changes from a remote branch?
easy
A. git pull
B. git merge
C. git commit
D. git branch

Solution

  1. Step 1: Recall commands that fetch and merge

    git pull fetches changes from a remote branch and merges them locally, often using a three-way merge.
  2. Step 2: Differentiate from other commands

    git merge merges branches locally but does not fetch remote changes; git branch manages branches; git commit records changes.
  3. Final Answer:

    git pull -> Option A
  4. Quick Check:

    git pull = fetch + merge (three-way) [OK]
Hint: git pull fetches and merges remotely with three-way merge [OK]
Common Mistakes:
  • Choosing git merge without fetching first
  • Confusing git commit with merge
  • Using git branch for merging
3. Given the following scenario:
Branch A has file.txt with content: "Hello World"
Branch B modifies file.txt to: "Hello Git"
Common base has file.txt: "Hi World"
What will be the content of file.txt after a successful three-way merge of Branch B into Branch A?
medium
A. "Hello"
B. "Hello Git"
C. "Hello World Git"
D. "Hello World"

Solution

  1. Step 1: Identify changes from base to each branch

    Base has "Hi World". Branch A changed "Hi" to "Hello". Branch B changed "Hi" to "Hello" and "World" to "Git".
  2. Step 2: Understand three-way merge result

    Since the change "Hi" -> "Hello" is common to both branches, and Branch B has an additional change "World" -> "Git", Git's three-way merge automatically combines them, resulting in "Hello Git".
  3. Final Answer:

    "Hello Git" -> Option B
  4. Quick Check:

    Three-way merge picks combined changes, here "Hello Git" [OK]
Hint: Merged content reflects changes from both branches via base [OK]
Common Mistakes:
  • Assuming content concatenates both changes
  • Ignoring base version in merge
  • Confusing which branch's changes apply
4. You ran git merge feature but got a conflict in app.js. What should you do to resolve this three-way merge conflict?
medium
A. Run git reset --hard immediately to discard all changes
B. Delete app.js and run git merge --abort
C. Edit app.js to fix conflicts, then run git add app.js and git commit
D. Run git branch -d feature to delete the feature branch

Solution

  1. Step 1: Understand merge conflict resolution

    When a conflict occurs, you must manually edit the conflicting file to resolve differences.
  2. Step 2: Stage and commit resolved file

    After fixing conflicts in app.js, use git add to stage and then git commit to complete the merge.
  3. Final Answer:

    Edit app.js, then git add and git commit -> Option C
  4. Quick Check:

    Fix conflicts, stage, commit to resolve merge [OK]
Hint: Fix conflicts manually, then add and commit [OK]
Common Mistakes:
  • Deleting files instead of resolving conflicts
  • Aborting merge without fixing conflicts
  • Deleting branches to fix conflicts
5. You have two branches, main and feature. Both modified the same function in utils.py differently. After running git merge feature into main, a three-way merge conflict occurs. Which approach best resolves this conflict while preserving both changes?
hard
A. Delete feature branch and continue with main unchanged
B. Force merge with git merge --strategy=ours to keep main version only
C. Reset main to the common ancestor commit and retry merge
D. Manually edit utils.py to combine both changes logically, then stage and commit

Solution

  1. Step 1: Recognize conflict in same function

    Both branches changed the same function differently, causing a conflict during merge.
  2. Step 2: Choose best resolution method

    Manually editing the file to combine both changes logically preserves work from both branches, which is the best practice.
  3. Step 3: Stage and commit after resolving

    After editing, stage the file with git add and commit to complete the merge.
  4. Final Answer:

    Manually edit utils.py to combine changes, then stage and commit -> Option D
  5. Quick Check:

    Manual merge preserves both changes best [OK]
Hint: Edit conflicts to combine changes, then add and commit [OK]
Common Mistakes:
  • Using --strategy=ours loses feature changes
  • Deleting branches to avoid conflicts
  • Resetting loses recent work