Примерно так:
1. на системе есть файл А.
2. делаем бэкап, файл появляется в бэкапе.
3. в системе файл удаляем, делаем бэкап, файла в бэкапе теперь тоже нет.
4. в системе появляется файл А.
5. разворачиваем бэкап и система бэкапа удаляет файл А из системы, т.к. его нет в бэкапе.
Но вообще, думаю, что вопрос свой сам решил.
git мне не подходит из-за особенностей работы с вложенными репозиториями, поэтому взял меркуриал (с гитом он не конфликтует, а вложенных репозиториев меркуриала у меня нет).
Сейчас тестирую, но, похоже, что всё ок.
Если кому интересно, делаю так:
бэкап: hg add && hg commit -m add && hg push
восстановление: hg pull && hg update && hg clean
hg clean как раз и делает пункт 4 из условий.
Эту систему я использую для поддержания единого рабочего окружения на нескольких компьютерах. Синхронизирую папку /home/<пользователь>.
Единственное неудобство - со временем репозиторий будет разрастаться, т.к. сложнее удалять старые копии бэкапов, ведь репозиторий хранит всю историю коммитов. Но есть hg convert, с помощью которой худо-бедно это можно сделать.