Recommended Free Tools
Yes: Git can reuse a hand-resolved merge conflict when a sufficiently similar conflict appears again. Turn on rerere (“reuse recorded resolution”) with git config --global rerere.enabled true. When Git applies a saved resolution, review and test the result before staging it: by default, rerere updates the working tree but leaves the index alone.
What rerere remembers—and when it helps
Rerere records a conflicted automatic merge and the corresponding resolution you make by hand. If a matching conflict occurs later, Git can apply that saved resolution. The Git project’s git-rerere manual describes this as recording conflicted auto-merge results and their hand resolutions, then applying previously recorded resolutions to corresponding auto-merge results.
As an Amazon Associate I earn from qualifying purchases.
It is most useful when the same conflict recurs during repeated merges or rebases. For example, a developer may periodically merge a moving upstream branch into a long-lived topic branch to test it. After resolving a conflict during one test merge, rerere can reuse that work when the topic branch is tested again or finally integrated. Git’s Pro Git guide to maintaining a project describes this kind of workflow.
Free tools Windows power users keep installed
One-click scans. No signup required.
Rerere is not a general-purpose code understanding feature. It can recognize a recurring conflict shape and apply the earlier choice, but it cannot tell whether that choice still makes sense after the surrounding code or requirements change.
#1 Best Overall
Enable rerere
To enable recording for your user across repositories, run:
git config --global rerere.enabled true
To limit the setting to the repository you are in, omit --global:
Rank #2
git config rerere.enabled true
With the setting enabled, Git invokes rerere in merge and rebase conflict workflows. You can also run git rerere directly. The Git project’s git-config documentation notes that rerere is enabled by default if an rr-cache directory already exists under $GIT_DIR.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallReview a reused resolution before staging
A saved resolution is a proposed edit, not an approval. After Git applies it, inspect the working-tree changes, check for whitespace errors, run the relevant project tests, and stage the file yourself when satisfied:
git diff
git diff --check
# Run the project's relevant tests and review the behavior
git add <file>
The Git project’s git-rerere manual explicitly says that rerere leaves the index alone, so you still need final sanity checks with git diff (or git diff -c) and git add once satisfied.
The rerere.autoUpdate setting changes that behavior: when true, a cleanly reused result also updates the index. Its documented default is false. Keeping the default supports a deliberate review-and-stage workflow. If you enable auto-update, inspect the result just as carefully before committing. During git am, the Git project’s git-am documentation also documents --no-rerere-autoupdate as a way to prevent rerere from updating the index automatically.
Rank #4
How Git decides a conflict matches
Rerere does not compare whole files or infer programmer intent. It normalizes conflict content and looks for a matching conflict ID. The Git project’s rerere logic manual explains that normalization strips labels from conflict markers, removes common-ancestor content for diff3 and zdiff3 styles, and sorts conflict hunks. As a result, differences such as branch labels, conflict style, or merge order do not necessarily prevent a match.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsFor a regular conflict, the logic manual describes the ID as a SHA-1 hash of normalized hunks separated by NUL characters, with conflict markers stripped. When a saved resolution is reused, Git performs a three-way merge involving the earlier conflicted auto-merge, the earlier hand resolution, and the current conflicted auto-merge. If that merge is clean, Git writes the result into the working tree. A clean result only means the merge completed without a textual conflict; it does not prove the old decision is correct for the current code.
Best Value
Inspect, correct, or remove rerere records
These commands help you see what rerere is handling and manage saved choices:
| Command | What it does |
|---|---|
git rerere status |
Lists paths with conflicts whose resolution rerere will record. |
git rerere remaining |
Lists paths with conflicts that were not autoresolved, including conflict types rerere cannot track, such as conflicting submodules. |
git rerere diff |
Shows changes to the current resolution as you make it. |
git rerere forget <pathspec> |
Resets the recorded resolution for matching paths in the current conflicts. |
git rerere clear |
Resets rerere metadata when you abandon a merge resolution. |
git rerere gc |
Prunes old conflict records. |
If an earlier choice is no longer appropriate, use git rerere forget <pathspec> for the affected path rather than letting Git reuse that choice again. When aborting a resolution, git rerere clear resets its metadata; Git’s am and rebase skip or abort flows invoke this cleanup automatically.
Limits and record retention
Rerere relies on conflict-marker syntax to identify conflicts. Source lines that look like conflict markers can confuse detection; the rerere logic manual points to the conflict-marker-size gitattributes setting as a workaround. Unmatched conflict markers can also prevent rerere from handling a conflict. These are edge cases, not the normal repeated-merge workflow.
Some conflict types cannot be tracked for autoresolution. Conflicting submodules, for example, can appear in git rerere remaining rather than being resolved automatically.
Saved records are not permanent. According to the current git-rerere manual, git rerere gc uses defaults of 15 days for unresolved records and 60 days for resolved records. These are age thresholds applied when garbage collection runs, not a schedule or guarantee that cleanup happens at those intervals. The Git configuration documentation identifies gc.rerereUnresolved and gc.rerereResolved as the settings that control those periods.
Quick Recap
Choose a scope and review policy
- For recurring conflicts: Enable rerere if the same normalized conflict tends to return during test merges, rebases, or integration. It offers less benefit for isolated, unrelated conflicts.
- For one repository: Use repository-local
git config rerere.enabled trueif you do not want to enable it everywhere. Use--globalfor a user-wide preference. - For review-first staging: Leave
rerere.autoUpdateat its documented default offalse, review the working-tree diff, test, and stage manually. - For a stale saved choice: Forget the record for the current conflict path instead of reusing a resolution that no longer fits.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




