Skip to main content

tools-p4-resolve

Perforce conflict resolution including merge strategies, 3-way merge, resolve workflows, and handling binary conflicts.

Jump to install

Source facts

Repository
tjboudreaux/cc-plugin-perforce
Last source activity
February 6, 2026 at 04:08
Detected SKILL.md language
English
Stars
8
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
tools-p4-resolve
description
Perforce conflict resolution including merge strategies, 3-way merge, resolve workflows, and handling binary conflicts.
# Perforce Conflict Resolution ## Overview Conflicts occur when multiple users modify the same file. Perforce provides powerful resolve tools for merging changes. This skill covers all resolve strategies and workflows. ## When to Use - After syncing when files have conflicts - Before submitting changes - When integrating between branches - Handling binary file conflicts - Resolving content vs attribute conflicts ## Core Concepts ### Conflict Types | Type | Description | Resolution | |------|-------------|------------| | **Content** | Both versions modified same lines | Merge or choose version | | **Attribute** | File type or permissions changed | Choose attribute | | **Delete** | File deleted in one version, modified in other | Keep or delete | | **Move/Delete** | File moved and deleted | Choose action | | **Binary** | Binary file modified by both | Choose version (no merge) | ### Three-Way Merge ``` Base (common ancestor) | +-- Theirs (depot/source) | +-- Yours (workspace) | v Merged Result ``` ## Basic Resolve ### Check for Conflicts ```bash # Preview resolve (see what needs resolving) p4 resolve -n # See files that need resolving p4 resolve -n //depot/project/... # Check specific file p4 resolve -n file.txt ``` ### Automatic Resolve ```bash # Auto-resolve all (safe merge where possible) p4 resolve -am # Auto-resolve accepting merge result p4 resolve -am //depot/project/... # Auto-resolve specific file p4 resolve -am file.txt ``` ### Resolve Strategies ```bash # Accept automatic merge (only if no conflicts) p4 resolve -am # Accept theirs (depot version) p4 resolve -at # Accept yours (workspace version) p4 resolve -ay # Force accept theirs even with conflicts p4 resolve -at //... # Force accept yours even with conflicts p4 resolve -ay //... ``` ## Interactive Resolve ### Launch Interactive Resolve ```bash # Interactive resolve for all files p4 resolve # Interactive resolve for specific file p4 resolve file.txt # Interactive with specific merge tool p4 resolve -t p4merge file.txt ``` ### Interactive Menu Options ``` Diff results: 1: Accept theirs (loses your changes) 2: Accept yours (loses depot changes) 3: Accept merge result 4: Edit merge result 5: Show differences (base to theirs) 6: Show differences (base to yours) 7: Show differences (yours to theirs) 8: Skip this file 9: Help Choose option: ``` ### Interactive Workflow ```bash # 1. Start resolve p4 resolve file.txt # 2. View differences # Option 5, 6, or 7 to understand changes # 3. Choose resolution # Option 1 (theirs), 2 (yours), or 3 (merge) # 4. If merge has conflicts, option 4 to edit # 5. Accept final result # Option 3 to accept merge ``` ## Merge Tools ### Configure P4 Merge Tool ```bash # Set P4MERGE environment variable export P4MERGE=/usr/local/bin/p4merge # Or use other merge tools export P4MERGE=/usr/local/bin/code # VS Code export P4MERGE=/usr/local/bin/meld # Meld export P4MERGE=/usr/bin/vimdiff # Vim ``` ### P4Merge Workflow ```bash # Launch P4Merge for conflict p4 resolve -t file.txt # P4Merge shows four panes: # - Base (original) # - Theirs (depot) # - Yours (local) # - Result (merged) # Edit result pane, save, close # Accept result in terminal ``` ### Visual Studio Code Merge ```bash # Set VS Code as merge tool export P4MERGE="code --wait --merge" # Resolve using VS Code p4 resolve file.txt ``` ## Resolve Scenarios ### Simple Auto-Merge ```bash # Both changed different parts of file p4 sync # File needs resolve... p4 resolve -am # Merge successful - changes combined ``` ### Conflicting Changes ```bash # Both changed same lines p4 sync p4 resolve -am # Conflicts detected... # Option 1: Accept theirs p4 resolve -at file.txt # Option 2: Accept yours p4 resolve -ay file.txt # Option 3: Manual merge p4 resolve file.txt # Choose option 4 to edit # Fix conflicts in editor # Save and accept ``` ### Binary File Conflicts ```bash # Binary files can't be merged p4 sync p4 resolve -n # Binary conflict on image.psd # Accept theirs (depot version) p4 resolve -at image.psd # Or accept yours (your version) p4 resolve -ay image.psd ``` ### Delete vs Edit Conflict ```bash # File deleted in depot, edited locally p4 sync p4 resolve -n # Delete vs edit conflict... # Keep your edited version p4 resolve -ay file.txt # Or accept delete p4 resolve -at file.txt ``` ## Advanced Resolve ### Partial Resolve ```bash # Resolve only content, not attributes p4 resolve -c //... # Resolve only attributes p4 resolve -A //... # Resolve specific attribute type p4 resolve -Aa //... # All attributes p4 resolve -Ab //... # Branch action p4 resolve -At //... # File type ``` ### Re-Resolve ```bash # Re-resolve already resolved file p4 resolve -f file.txt # Re-resolve with different strategy p4 resolve -f -at file.txt ``` ### Resolve During Integration ```bash # Integrate between branches p4 integrate //depot/dev/... //depot/main/... # Resolve integration conflicts p4 resolve -am //depot/main/... # If conflicts remain p4 resolve //depot/main/... ``` ### Safe Resolve Workflow ```bash # 1. Preview what needs resolving p4 resolve -n # 2. Try automatic merge first p4 resolve -am # 3. Check what remains p4 resolve -n # 4. Handle remaining manually p4 resolve remaining_file.txt # 5. Verify resolve complete p4 resolve -n # Should show nothing ``` ## Conflict Markers ### Understanding Markers When editing merge result manually: ``` <<<<<<< THEIRS (depot version) code from depot ======= code from your workspace >>>>>>> YOURS (workspace version) ``` ### Resolving Markers ```bash # Edit file to remove markers vim file.txt # Original with markers: <<<<<<< THEIRS function getValue() { return this.value; } ======= function getValue() { return this.cachedValue || this.value; } >>>>>>> YOURS # Resolved (choose best version or combine): function getValue() { return this.cachedValue || this.value; } # Save and mark resolved p4 resolve -am file.txt ``` ## Resolve Workflows ### Pre-Submit Workflow ```bash #!/bin/bash # pre-submit-resolve.sh # Sync latest p4 sync # Check for conflicts CONFLICTS=$(p4 resolve -n 2>&1 | grep -c "resolve") if [ "$CONFLICTS" -gt 0 ]; then echo "Found $CONFLICTS files needing resolve" # Try auto-merge p4 resolve -am # Check remaining REMAINING=$(p4 resolve -n 2>&1 | grep -c "resolve") if [ "$REMAINING" -gt 0 ]; then echo "Manual resolve needed for $REMAINING files" p4 resolve -n exit 1 fi fi echo "Ready to submit" ``` ### Integration Workflow ```bash # 1. Integrate from source to target p4 integrate //depot/feature/... //depot/main/... # 2. Preview conflicts p4 resolve -n //depot/main/... # 3. Auto-resolve safe merges p4 resolve -am //depot/main/... # 4. Handle remaining conflicts p4 resolve //depot/main/... # 5. Test merged code # 6. Submit integration p4 submit -d "Integrate feature to main" ``` ### Batch Resolve Pattern ```bash # Accept all theirs (when their changes are correct) p4 resolve -at //depot/project/... # Accept all yours (when your changes are correct) p4 resolve -ay //depot/project/... # Mixed resolution p4 resolve -at //depot/project/Assets/... # Accept art assets p4 resolve -am //depot/project/Scripts/... # Merge code ``` ## Undoing Resolve ### Revert and Re-Sync ```bash # If resolve went wrong, revert and start over p4 revert file.txt p4 sync file.txt p4 edit file.txt # Re-apply your changes manually ``` ### Back Out Bad Merge ```bash # After bad submit, can sync to previous and re-submit p4 sync //depot/project/file.txt#head-1 p4 edit file.txt p4 sync -f //depot/project/file.txt#head-1 p4 resolve -ay file.txt p4 submit -d "Revert bad merge" ``` ## Best Practices 1. **Sync frequently** - Smaller merges are easier 2. **Resolve before submit** - Never submit unresolved 3. **Preview first** with `p4 resolve -n` 4. **Try auto-merge** before manual 5. **Use visual merge tool** for complex conflicts 6. **Test after resolve** - Merged code may have bugs 7. **Keep changelists small** - Easier to resolve 8. **Communicate with team** about conflicting areas 9. **Use exclusive locks** for binary files 10. **Document conflict resolution** in submit description ## Troubleshooting | Issue | Solution | |-------|----------| | "Must resolve before submit" | Run `p4 resolve` | | "No file(s) to resolve" | Already resolved or no conflicts | | Merge tool not launching | Check P4MERGE setting | | Markers left in file | Edit to remove, re-resolve | | Wrong resolution accepted | Revert, sync, re-resolve | | Binary conflict | Must accept one version (-at or -ay) |
View on GitHub