В моем проекте есть файл foo
, который я использовал и зарегистрировал с помощью git
. Я просто сделал несколько рефакторингов, так что мне больше не нужен файл. Если я сделаю git rm foo
, будет ли файл все еще существовать в старших коммитах? Смогу ли я проверить старшую фиксацию и работать с файлом?
Git rm удаляет всю историю файла?
Ответ 1
Нет, git rm
(плюс фиксация) записывает новое дерево, которое отражает файл, больше не присутствует. Вся история файла, включая создание, модификации и возможное удаление, присутствует в истории.
Ответ 2
Нет, git rm
удалит только файл из рабочего каталога и добавит это удаление в индекс. Таким образом, затрагиваются только будущие коммиты. Все предыдущие коммиты остаются неизменными, и история фактически покажет, когда вы удалили файл из репозитория.
В общем, все фиксации, сделанные вами ранее, являются постоянными, поэтому вам никогда не нужно беспокоиться о потере коммитов, когда они где-то в истории. Конечно, есть некоторые вещи, которые могут удалить или изменить предыдущие коммиты (например, rebasing), но для большинства вещей вы делаете, вы довольно безопасны.
Ответ 3
-
Вы можете проверить любую старую версию с использованием известного идентификатора фиксации со всеми принадлежащими ему состояниями, включая файлы, которые удалены сейчас. См. git ветвь <branchname> < начальная точка > где начальная точка - это идентификатор фиксации. Вы даже не должны отслеживать, что начальная точка принадлежит текущей ветке; Идентификаторы commit должны быть уникальными, поэтому они могут быть в любой ветки, известной текущему репозиторию.
-
Вы можете проверить предыдущую историю файла с помощью команды log; но он работает не в каком-либо синтаксисе - для 1.7.7 я буду выпустить "git log - oldpath" вместо простого "git log oldpath", потому что иначе он не сможет отличить путь от ревизии. Для некоторых других команд в качестве "вины" даже этого недостаточно - для его запуска нужно проверить старую ревизию.