Разветвление файлов в случае изменений легко с помощью жестких ссылок: просто удалите файл, который был изменен путем, и поместите измененный файл на место. Жесткие ссылки указывают на данные, но являются независимыми путями и поэтому могут быть удалены, не затрагивая другие жесткие ссылки или сами данные. Единственной рискованной частью является запись непосредственно в файл за жесткой ссылкой, поскольку это, конечно, изменит данные для всех жестких ссылок, указывающих на эти данные, просто потому, что для всех "одинаковых" жестких ссылок имеется только одна информация. Так что вам нужно знать, изменились ли вещи, и если нужно, создать новый файл.
Поскольку вы запрашиваете резервное копирование, ваша проблема не должна возникать в любом случае: каждое изменение файла должно приводить к созданию нового файла в резервной копии, без каких-либо изменений вы можете создавать жесткие ссылки на уже имеющиеся данные. Так что ваш процесс в любом случае должен будет сначала проверить наличие изменений, я не вижу, где вам нужно решить, нужно ли и как вы хотите что-то изменить в резервной копии. Резервное копирование заключается в том, чтобы оставить все как есть и решить, как добавлять новые вещи.
В общем, я бы не советовал реализовывать такие вещи самостоятельно, просто слишком сложно и слишком легко ошибиться. Уже есть доступные решения, реализующие то, что вы имеете в виду, например, инструмент под названием HardlinkBackup.