Подтвердить что ты не робот

Git rm удаляет всю историю файла?

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

  • Вы можете проверить любую старую версию с использованием известного идентификатора фиксации со всеми принадлежащими ему состояниями, включая файлы, которые удалены сейчас. См. git ветвь <branchname> < начальная точка > где начальная точка - это идентификатор фиксации. Вы даже не должны отслеживать, что начальная точка принадлежит текущей ветке; Идентификаторы commit должны быть уникальными, поэтому они могут быть в любой ветки, известной текущему репозиторию.

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