Как запретить git commit удалять файлы

Я только что сделал git commit, и он удалил несколько файлов, казалось бы, случайно из моей папки node_modules. У кого-нибудь была эта проблема?

Чтобы было ясно, мой последний git commit удален

delete mode 100644 node_modules/grunt-google-cdn/node_modules/google-cdn/node_modules/cdnjs-cdn-data/external/cdnjs.json

 delete mode 100644 node_modules/grunt-node-inspector/node_modules/node-inspector/front-end-node/Images/src/favicon.eps

 delete mode 100644 node_modules/moment/min/tests.js

 delete mode 100755 node_modules/requirejs/bin/r.js

Я никогда не видел этого раньше, и я не могу понять, почему это произошло. Это мешает мне создать приложение для развертывания. Кто-нибудь знает, как / почему это произошло и как это можно предотвратить в будущем?

2 ответа

Решение

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

Если вы используете Git 2.0 или выше, когда вы набрали git add .Вы поставили удаленные файлы для фиксации. git add . в основном говорит: "Я хочу внести все изменения в это репо", что в данном случае включает удаление файлов.

Поведение было другим в предыдущих версиях (я только что проверил другое поведение в отношении Git 1.9 и 2.6.3).

Я только сделал мерзавец добавить. заранее

Итак, вы попросили Git поставить все в . (текущий каталог). Это включает в себя удаленные файлы:

например, указав dir будет записывать не только файл dir/file1 модифицированный в рабочем дереве файл dir/file2 добавлен в рабочее дерево, но и файл dir/file3 удалено из рабочего дерева

Если эти файлы были удалены каким-то не-git процессом, и вы впоследствии запустили git add . и затем зафиксированные, удаления были бы зафиксированы.

Сравнение документации для версии 1.9.2 и версии 2.0.0 git-add показывает, что это поведение изменилось в версии 2.

Чтобы указать git игнорировать удаленные файлы в коммите и зафиксировать все остальные изменения:

git add --ignore-removal .
Другие вопросы по тегам