← На главную

Git rerere: включи и забудь о повторных конфликтах

01.06.2026 07:06 · hackernews

У Git есть скрытая фича под названием rerere (Reuse Recorded Resolution). Она запоминает, как ты разрешил конфликт при слиянии, и при повторном возникновении того же конфликта просто применяет прошлое решение.

Включается одной командой: git config --global rerere.enabled true. После этого Git начинает сохранять образцы конфликтных участков и твои решения в папку .git/rr-cache.

Как это работает на практике. Допустим, у тебя ветка master и ответвлённая от неё dev. Ты переключаешься на staging, пытаешься вмержить dev и получаешь конфликт. Если rerere включён, вывод будет не просто "CONFLICT", а ещё строка Recorded preimage for 'user.rb' — Git сделал снимок конфликта до того, как ты его тронул.

Ты разрешаешь конфликт вручную, добавляешь файл, делаешь git merge --continue. Git выводит Recorded resolution for 'user.rb' — запомнил, как ты разрулил ситуацию.

Теперь самое интересное. Ты откатываешь слияние через git reset --hard HEAD^ и пробуешь снова: git merge dev. Git снова видит тот же конфликт, но теперь он пишет Resolved 'user.rb' using previous resolution. Тебе даже не нужно открывать файл — просто git add и git merge --continue. Готово.

Функция спасает, когда ты исправил кучу конфликтов, закоммитил, а потом понял, что нужно перебазироваться или переделать слияние. Вместо того чтобы заново проходить ад из тех же самых кусков, rerere всё подставляет автоматически. Оно же пригождается при ребазе, если после исправления конфликтов ты решаешь переписать историю. Работает один раз — больше не думаешь.

Читать оригинал →