Resolving Git Merge Conflicts in a Multi-Branch Workflow

Resolving Git Merge Conflicts in a Multi-Branch Workflow

The Problem

I encountered a situation where multiple pull requests (PRs) in a React project had become unmergeable due to conflicts. The project had progressed through several weekly iterations, each building upon the previous work:

  • Week 1: Initial setup
  • Week 2: Component structure
  • Week 3: State management
  • Week 4: Complete functionality with hooks

Diagnosing the Issue

To identify the merge conflict status, I used these GitHub CLI commands:

# List all PRs with their status
gh pr list --state all --limit 10

# Check detailed merge status for each PR
gh pr view 2 --json state,mergeable,mergeStateStatus
gh pr view 3 --json state,mergeable,mergeStateStatus
gh pr view 4 --json state,mergeable,mergeStateStatus

The output revealed:

  • PR #2 and #3: "mergeable":"CONFLICTING"
  • PR #4: "mergeable":"MERGEABLE"

Understanding the Root Cause

The conflicts occurred because:

  1. Each week's branch was created from the previous week's branch
  2. Later PRs included all changes from earlier weeks
  3. Attempting to merge older PRs after newer ones created conflicts

The Solution

Instead of resolving conflicts in older PRs, I took a more efficient approach:

# 1. Merge the most recent PR that includes all changes
gh pr merge 4 --merge

# 2. Verify the merge was successful
gh pr view 4 --json state

# 3. Update local main branch
git checkout main
git pull origin main

Key Takeaways

  1. Check PR dependencies: Before merging, verify if newer PRs already include changes from older ones
  2. Use CLI tools: The GitHub CLI provides detailed merge status information not visible in the UI
  3. Consider PR order: When working with sequential branches, merge in chronological order or skip redundant PRs
  4. Keep branches updated: Regularly rebase feature branches on main to prevent conflicts

Useful Commands Reference

# Check all branches (local and remote)
git branch -a

# View PR merge conflicts
gh pr view <number> --json mergeable,mergeStateStatus

# Rebase current branch on main
git rebase main

# Create and switch to new branch
git checkout -b branch-name

This approach saved time by avoiding unnecessary conflict resolution and ensured a clean commit history.


If you enjoyed this article, you can also find it published on LinkedIn and Medium.