Что имел в виду Линус, когда сказал, что Git гарантирует, что файлы не повреждены, он имел в виду тот факт, что когда вы ссылаетесь на конкретный коммит (идентифицируемый его хешем), вы гарантируете , что он всегда будет ссылаться на одно и то же состояние хранилища. Если вы извлекаете ядро Linux из дерева Линуса и он ссылается на какой-то коммит ae6bcd1 ..., вы ничего не сможете сделать (даже в своем локальном репозитории), чтобы когда-либо сделать коммит ae6bcd1 ... выглядело иначе, чем коммит Линус смотрит, когда ссылается на него.
Более того, поскольку объект коммитов содержит ссылки на (все) его родительских коммитов, когда вы ссылаетесь на коммит, вы также гарантируете его полную историю в DAG.
Что касается повреждения файлов, это своего рода независимая проблема; но без повреждения реальных объектов BLOB-объектов (например, .git / objects / ob / ject_hashname), если один из файлов вашего рабочего дерева будет поврежден, вы сможете восстановить данные из предыдущего состояния фиксации или из индекса / кэшированного состояния.
Вы никогда не сможете повредить пульт в этом случае, если вы не делаете принудительные нажатия (которые перезаписывают историю на удаленных устройствах), поскольку push гарантирует, что объекты фиксации образуют непрерывный граф истории.