Git commit удалил файл, но я не понимаю, как - PullRequest
0 голосов
/ 12 января 2012

Файл исчез из репозитория Git, но нет коммита, который удаляет его.Я заметил это только потому, что проект не смог скомпилироваться.Я попытался разделить пополам первый неверный коммит - т.е. первый коммит, когда этот файл исчез, но история коммитов не имеет ничего общего с этим файлом, в diff нет ничего, что могло бы его удалить.Я использую машину Win7 и MSysGit для работы с Git (GitHub).Я понятия не имею, как это произошло, и я хочу понять, что вызвало это.Любые предложения о том, как его исследовать, приветствуются!

Ответы [ 3 ]

2 голосов
/ 12 января 2012

Скорее всего, файл никогда не добавлялся в репозиторий git. К сожалению, это довольно распространенная ошибка; Вы создаете файл, но никогда не добавляете его в git. Поскольку git ничего не знает об этом, он не может помочь вам восстановить файл. Чтобы избежать этой проблемы, часто запускайте git status и позвольте git рассказать вам о файлах, которые существуют в вашем рабочем каталоге, о которых он не знает. Кроме того, клонируйте репо и убедитесь, что в клоне сборка прошла успешно.

1 голос
/ 13 января 2012

У меня был похожий случай один раз. Оказалось, что файл (или, в моем случае, изменение этого файла) исчез как часть коммита слияния из-за неправильного разрешения конфликта. Предположим следующее:

  • В вашей "главной" ветке есть файл A.
  • Ветвь "devel" на основе "master" изменяет файл A и добавляет файл B.
  • На "master", A также модифицируется.
  • Слияние «devel» с «master» создает конфликт в файле A.

Если вы теперь разрешите конфликт в A, но также удалите неконфликтующий B из коммита слияния, B «исчезнет» и не окажется в «master», хотя Git скажет вам, что «devel» полностью объединен с «master». ». Более того, в log / gitk нет указания, что B был удален как часть коммита слияния.

0 голосов
/ 07 ноября 2012

Это происходит в Windows, когда регистр (нижний / верхний) изменяется в имени файла, например, путем удаления и повторного создания его в новом регистре.

Когда вы извлекаете это изменение, удаление заставит git удалить «неправильный» файл, поскольку окна не различают регистр.

Решение, если вы не изменили файл: используйте git reset - имя файла и git checkout - имя файла

...