Merged claudedocs/ into docs/research/ for consistent documentation structure. Changes: - Moved all claudedocs/*.md files to docs/research/ - Updated all path references in documentation (EN/KR) - Updated RULES.md and research.md command templates - Removed claudedocs/ directory - Removed ClaudeDocs/ from .gitignore Benefits: - Single source of truth for all research reports - PEP8-compliant lowercase directory naming - Clearer documentation organization - Prevents future claudedocs/ directory creation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
8.1 KiB
Git Branch Integration Research: Master/Dev Divergence Resolution (2025)
Research Date: 2025-10-16 Query: Git merge strategies for integrating divergent master/dev branches with both having valuable changes Confidence Level: High (based on official Git docs + 2024-2025 best practices)
Executive Summary
When master and dev branches have diverged with independent commits on both sides, merge is the recommended strategy to integrate all changes from both branches. This preserves complete history and creates a permanent record of integration decisions.
Current Situation Analysis
- dev branch: 2 commits ahead (PM Agent refactoring work)
- master branch: 3 commits ahead (upstream merges + documentation organization)
- Status: Divergent branches requiring reconciliation
Recommended Solution: Two-Step Merge Process
# Step 1: Update dev with master's changes
git checkout dev
git merge master # Brings upstream updates into dev
# Step 2: When ready for release
git checkout master
git merge dev # Integrates PM Agent work into master
Research Findings
1. GitFlow Pattern (Industry Standard)
Source: Atlassian Git Tutorial, nvie.com Git branching model
Key Principles:
develop(ordev) = active development branchmaster(ormain) = production-ready releases- Flow direction: feature → develop → master
- Each merge to master = new production release
Release Process:
- Development work happens on
dev - When
devis stable and feature-complete → merge tomaster - Tag the merge commit on master as a release
- Continue development on
dev
2. Divergent Branch Resolution Strategies
Source: Git official docs, Git Tower, Julia Evans blog (2024)
When branches have diverged (both have unique commits), three options exist:
| Strategy | Command | Result | Best For |
|---|---|---|---|
| Merge | git merge |
Creates merge commit, preserves all history | Keeping both sets of changes (RECOMMENDED) |
| Rebase | git rebase |
Replays commits linearly, rewrites history | Clean linear history (NOT for published branches) |
| Fast-forward | git merge --ff-only |
Only succeeds if no divergence | Fails in this case |
Why Merge is Recommended Here:
- ✅ Preserves complete history from both branches
- ✅ Creates permanent record of integration decisions
- ✅ No history rewriting (safe for shared branches)
- ✅ All conflicts resolved once in merge commit
- ✅ Standard practice for GitFlow dev → master integration
3. Three-Way Merge Mechanics
Source: Git official documentation, git-scm.com Advanced Merging
How Git Merges:
- Identifies common ancestor commit (where branches diverged)
- Compares changes from both branches against ancestor
- Automatically merges non-conflicting changes
- Flags conflicts only when same lines modified differently
Conflict Resolution:
- Git adds conflict markers:
<<<<<<<,=======,>>>>>>> - Developer chooses: keep branch A, keep branch B, or combine both
- Modern tools (VS Code, IntelliJ) provide visual merge editors
- After resolution,
git add+git commitcompletes the merge
Conflict Resolution Options:
# Accept all changes from one side (use cautiously)
git merge -Xours master # Prefer current branch changes
git merge -Xtheirs master # Prefer incoming changes
# Manual resolution (recommended)
# 1. Edit files to resolve conflicts
# 2. git add <resolved-files>
# 3. git commit (creates merge commit)
4. Rebase vs Merge Trade-offs (2024 Analysis)
Source: DataCamp, Atlassian, Stack Overflow discussions
| Aspect | Merge | Rebase |
|---|---|---|
| History | Preserves exact history, shows true timeline | Linear history, rewrites commit timeline |
| Conflicts | Resolve once in single merge commit | May resolve same conflict multiple times |
| Safety | Safe for published/shared branches | Dangerous for shared branches (force push required) |
| Traceability | Merge commit shows integration point | Integration point not explicitly marked |
| CI/CD | Tests exact production commits | May test commits that never actually existed |
| Team collaboration | Works well with multiple contributors | Can cause confusion if not coordinated |
2024 Consensus:
- Use rebase for: local feature branches, keeping commits organized before sharing
- Use merge for: integrating shared branches (like dev → master), preserving collaboration history
5. Modern Tooling Impact (2024-2025)
Source: Various development tool documentation
Tools that make merge easier:
- VS Code 3-way merge editor
- IntelliJ IDEA conflict resolver
- GitKraken visual merge interface
- GitHub web-based conflict resolution
CI/CD Considerations:
- Automated testing runs on actual merge commits
- Merge commits provide clear rollback points
- Rebase can cause false test failures (testing non-existent commit states)
Actionable Recommendations
For Current Situation (dev + master diverged)
Option A: Standard GitFlow (Recommended)
# Bring master's updates into dev first
git checkout dev
git merge master -m "Merge master upstream updates into dev"
# Resolve any conflicts if they occur
# Continue development on dev
# Later, when ready for release
git checkout master
git merge dev -m "Release: Integrate PM Agent refactoring"
git tag -a v1.x.x -m "Release version 1.x.x"
Option B: Immediate Integration (if PM Agent work is ready)
# If dev's PM Agent work is production-ready now
git checkout master
git merge dev -m "Integrate PM Agent refactoring from dev"
# Resolve any conflicts
# Then sync dev with updated master
git checkout dev
git merge master
Conflict Resolution Workflow
# When conflicts occur during merge
git status # Shows conflicted files
# Edit each conflicted file:
# - Locate conflict markers (<<<<<<<, =======, >>>>>>>)
# - Keep the correct code (or combine both approaches)
# - Remove conflict markers
# - Save file
git add <resolved-file> # Stage resolution
git merge --continue # Complete the merge
Verification After Merge
# Check that both sets of changes are present
git log --graph --oneline --decorate --all
git diff HEAD~1 # Review what was integrated
# Verify functionality
make test # Run test suite
make build # Ensure build succeeds
Common Pitfalls to Avoid
❌ Don't: Use rebase on shared branches (dev, master) ✅ Do: Use merge to preserve collaboration history
❌ Don't: Force push to master/dev after rebase ✅ Do: Use standard merge commits that don't require force pushing
❌ Don't: Choose one branch and discard the other ✅ Do: Integrate both branches to keep all valuable work
❌ Don't: Resolve conflicts blindly with -Xours or -Xtheirs
✅ Do: Manually review each conflict for optimal resolution
❌ Don't: Forget to test after merging ✅ Do: Run full test suite after every merge
Sources
- Git Official Documentation: https://git-scm.com/docs/git-merge
- Atlassian Git Tutorials: Merge strategies, GitFlow workflow, Merging vs Rebasing
- Julia Evans Blog (2024): "Dealing with diverged git branches"
- DataCamp (2024): "Git Merge vs Git Rebase: Pros, Cons, and Best Practices"
- Stack Overflow: Multiple highly-voted answers on merge strategies (2024)
- Medium: Git workflow optimization articles (2024-2025)
- GraphQL Guides: Git branching strategies 2024
Conclusion
For the current situation where both dev and master have valuable commits:
- Merge master → dev to bring upstream updates into development branch
- Resolve any conflicts carefully, preserving important changes from both
- Test thoroughly on dev branch
- When ready, merge dev → master following GitFlow release process
- Tag the release on master
This approach preserves all work from both branches and follows 2024-2025 industry best practices.
Confidence: HIGH - Based on official Git documentation and consistent recommendations across multiple authoritative sources from 2024-2025.