Git rm удаляет всю историю файла? - PullRequest
16 голосов
/ 24 марта 2012

В моем проекте есть файл foo, который я использую и проверяю с помощью git. Я просто провел некоторый рефакторинг, так что мне больше не нужен файл. Если я сделаю git rm foo, файл все еще будет существовать в старых коммитах? Смогу ли я проверить старый коммит и работать с файлом?

Ответы [ 3 ]

24 голосов
/ 24 марта 2012

Нет, git rm (плюс коммит) записывает новое дерево, которое отражает, что файл больше не присутствует. Вся история файла, включая создание, изменение и возможное удаление, присутствует в истории.

7 голосов
/ 24 марта 2012

Нет, git rm только удалит файл из рабочего каталога и добавит это удаление в индекс.Таким образом, затрагиваются только будущие коммиты.Все предыдущие коммиты остаются прежними, и история фактически будет отображаться при удалении файла из репозитория.

В целом все ранее сделанные вами коммиты являются постоянными, поэтому вам никогда не придется беспокоиться о потере коммитов, как только они будут сделаны.где-то в истории.Конечно, есть некоторые вещи, которые могут удалить или изменить предыдущие коммиты (например, перебазирование), но для большинства вещей вы достаточно безопасны.

5 голосов
/ 24 марта 2012
  1. Вы сможете извлечь любую старую версию, используя известный идентификатор фиксации со всеми принадлежащими ей состояниями, включая файлы, которые сейчас удалены. Смотрите, например git branch <начальная точка>, где начальная точка - это идентификатор фиксации. Вы даже не должны отслеживать, что начальная точка принадлежит текущей ветви; идентификаторы коммитов должны быть уникальными, поэтому они могут находиться в любой ветке, известной текущему репозиторию.

  2. Вы можете проверить предыдущую историю файла, используя команду log; но он работает не в каком-либо синтаксисе - для 1.7.7 я буду выдавать «git log - oldpath» вместо простого «git log oldpath», потому что в противном случае он не сможет отличить путь от ревизии. Для некоторых других команд, таких как «обвинить», этого даже недостаточно - нужно проверить старую ревизию, чтобы запустить ее.

...