Resolving Git Merge Conflicts: A Practical Guide
Why Conflicts Happen
A merge conflict occurs when two branches modify the same line of a file differently. Git cannot decide which change to keep, so it asks you to choose.
Understanding Conflict Markers
When a conflict happens, Git edits the file with markers:
<<<<<<< HEAD
const timeout = 3000;
=======
const timeout = 5000;
>>>>>>> feature-branch
- `<<<<<<< HEAD` — your current branch's version
- `=======` — divides the two versions
- `>>>>>>> feature-branch` — the incoming branch's version
Resolving Step by Step
# Start the merge
git merge feature-branch
# Git reports: CONFLICT in src/config.ts
# Open the conflicted file, find the markers, edit to keep the right code
# Remove the markers and the unwanted version
# Stage the resolved file
git add src/config.ts
# Complete the merge
git commit
# Git opens the default merge commit message — save and quit
Abort a Merge
If the conflict is too complex or you changed your mind:
git merge --abort
# Returns to the state before the merge started
Merge Tools
Visual tools make conflict resolution much easier:
# Use VS Code as merge tool
git config --global merge.tool vscode
git mergetool
VS Code shows a three-pane view: yours, theirs, and the merged result. Other popular tools include Beyond Compare, Kaleidoscope, and Meld.
Strategies to Minimize Conflicts
1. **Pull frequently** — staying up to date with main reduces conflict size
2. **Communicate** — tell your team when you are working on shared files
3. **Small commits** — smaller changes are easier to merge
4. **Rebase before merge** — `git rebase main` on your feature branch catches conflicts early
Conflicts are normal — they are Git's way of protecting your work from accidental overwrites.