Представьте себе, что какому-то человеку - назовём его путешественником во времени - становится доступна возможность перейти на какой-либо из коммитов в имеющейся истории, сделать, так сказать, чекаут ревизии из лога. И путешественник во времени пытается перейти из точки Б в точку А, расположенную ранее. Что происходит в этот момент? В этот момент путешественник во времени переходит в то состояние, в котором находился тогда. Он не сохраняет память о всём, что было с ним между точками А и Б, так как эта память - суть наслоённые изменения, которые путешественник во времени забрать с собой не в силах.
Так как мы считаем человека обладателем свободной воли (многие полагают, что все процессы в человеческом мозгу строго детерминированы, так что никакой свободной воли на самом деле не существует), то, получается, путешественник во времени, попав в прошлое, хоть и не сохранит никакой информации о том, что он сюда перешёл и что с ним было между моментом, в который он перешёл, и собственно переходом, сожет начать действовать по-другому, равно как и все остальные люди. Таким образом, начинается новая ветка, в которой копятся свои изменения.
Аналогичный эффект будет и в том случае, когда путешественник во времени обладает способностью переходть из ветки в ветку. Этот перехож также не имеет смысла, так как путешественник во времени потеряет всю память о ветке, из которой он пришёл, и приобретет память о ветке, в которую он пришёл.
То есть с такой точки зрения путешествия во времени не имеют смысла.
Но системы контроля версий обладают ещё и другими базывыми функциями. Я имею в виду слияние веток. Если рассматривать каждый коммит как дельту - набор изменений, произошедших с прошлого коммита, то с такими штуками можно проворачивать другие фокусы (см. git cherry-pick, git stash и так далее). Значит, могут возникать конфликты. Как с такими конфликтами обходится время, я не знаю :) Надо подумать, как оно с ними может обходиться.
Оригинал записи http://blog.axshavan.ru/2013/12/vcs-time.html