Git - эквивалент эквивалента для "add."? - PullRequest
7 голосов
/ 19 апреля 2010

Если вы используете Git из командной строки, есть ли способ одним махом удалить все файлы, которые будут удалены в списке Изменен, но не обновлен? Вместо того, чтобы выполнять ручное удаление с использованием подстановочных знаков.

Ответы [ 3 ]

8 голосов
/ 08 февраля 2012

Следующие элементы должны помещать в индекс все файлы, независимо от того, удалены они или нет:

git add -A
4 голосов
/ 19 апреля 2010

Хорошо, файлы, перечисленные в Изменены, но не обновлены , уже есть в индексе. Вы можете отменить их изменения, используя git checkout .
Чтобы удалить файл, который является новым, но не был добавлен в индекс, вы можете использовать git clean.
Но для удаления файлов, которые изменены и в индексе ... ну, нет простого решения, вам, вероятно, придется использовать комбинацию git rm и git ls-files.

EDIT:
git ls-files -m должен перечислить файлы, которые вы ищете. Объедините его с git rm и все готово:

git-ls files -m | xargs git rm // NOT TESTED

EDIT:
Я, вероятно, неправильно понял часть вашего вопроса. Мое решение удалит все файлы, перечисленные в Изменено, но не обновлено . Если вы хотите удалить файлы, перечисленные как Удалено , вы должны использовать git diff, как показывает Чарльз Бэйли в своем ответе.

3 голосов
/ 19 апреля 2010

Файлы, показанные как удаленные в разделе «Изменено, но не обновлено», удаляются из рабочего дерева, но не из индекса. Чтобы выполнить удаление в индексе (то есть удалить файл из индекса), вы можете сделать:

git diff -z --name-only --diff-filter=D | git update-index --remove -z --stdin

--diff-filter=D показывает только различия с индексом, которые являются удаленными файлами, --name-only просто печатает их имя, а -z использует NUL для разделения имен файлов, чтобы вам не приходилось беспокоиться об именах файлов со встроенными символами новой строки. update-index затем удаляет указанные файлы из индекса.

Если у вас есть версия xargs, которая поддерживает -0, вы можете сделать немного проще:

git diff -z --name-only --diff-filter=D | xargs -0 git rm
...