Для объединения двух версий текста можно использовать утилиту
diff3, парсить ее вывод, а для пользователя реализовать интерфейс для просмотра ее вывода и решения конфликтов. Готовых библиотек для представления diff в веб я не знаю, но, вероятно, таковые имеются.
diff3 mine older yours
, где mine and yours - версии для слияния, а older - базовая версия.
Учитывая, что вы хотите хранить историю версий текста - может быть имеет смысл использовать для этого, собственно, гит репозиторий под капотом - он для того и предназначен. В зависимости от специфики можно как иметь по отдельному репозиторию для каждого текста, так и один общий для всех. И в нем хранить историю версий и через него же мерджить версии. Возможно, получится найти и использовать готовые интерфейсы для работы с git через веб, либо надо будет написать свой. А в базе можно хранить только финальный текст, без истории.