Git rm несколько файлов?

Как легко удалить несколько файлов, не набирая вручную все пути до git rm? У меня есть много измененных файлов, которые я хотел бы сохранить, поэтому удаление всех измененных также невозможно.

А также можно отменить изменения нескольких файлов без ввода вручную git checkout -- /path/to/file?

Ответы

Ответ 1

Вы можете указать подстановочные знаки git rm.

например.

git rm *.c

Или вы можете просто записать имена всех файлов в другом файле, например filesToRemove.txt:

path/to/file.c
path/to/another/file2.c
path/to/some/other/file3.c

Вы можете автоматизировать это:

find . -name '*.c' > filesToRemove.txt

Откройте файл и просмотрите имена (чтобы убедиться, что все в порядке).

Тогда:

cat filesToRemove.txt | xargs git rm

Или:

for i in `cat filesToRemove.txt`; do git rm $i; done

Проверьте man-страницу для xargs для получения дополнительных параметров (особенно если слишком много файлов).

Ответ 2

Просто удалите их с помощью любого другого метода (Explorer, независимо), затем запустите git add -A. Что касается возврата нескольких файлов, вы также можете проверить каталог.

Ответ 3

В системах POSIX вы можете создать glob оболочки, которая будет соответствовать всем желаемым файлам, вы можете просто передать это на git rm и git checkout --. В Windows cmd.exe и PowerShell не включают в себя функции globbing и farm для приложений (git не делает это для файлов, из того, что я прочитал). Вам нужно будет использовать команду Windows или script, чтобы подготовить список файлов и соответствующим образом передать его в ваши команды git, чтобы получить аналогичный эффект.

Любая стратегия, которую вы использовали бы для передачи списка файлов команде оболочки, будет работать для команд git, которые принимают пути к файлам.

Ответ 4

Для одновременного удаления нескольких файлов вы можете проверить ответ здесь

Вы можете удалить файлы, которые не хотите, и выполнить следующую команду: git rm $(git ls-files --deleted)

Ответ 5

Вы можете просто использовать:

git add -u

Ответ 6

Вы также можете проверить Cygwin, поскольку он предоставляет большую часть функциональных возможностей Unix/Linux/* BSD в Windows. Cygwin включает оболочку Bash и find (1), среди других инструментов, упомянутых выше. (Обычно у меня обычно есть 2-4 терминала Cygwin mintty в Windows 7, потому что я считаю, что Cygwin удобен.)

Ответ 7

Я нашел git rm обработку диких карточек, раздражающих. Найти может сделать трюк в одной строке: find . -name '*.c' -exec git rm {} \; {} - это место, где будет заменено имя файла. Самое замечательное в find заключается в том, что он может фильтровать огромное количество атрибутов файла, а не только имя.

Ответ 8

В Windows 10 с помощью Git Bash, из .gitignore в вашей файловой структуре.

git rm -r --cached some_directory/

Я просто использовал это, чтобы игнорировать весь каталог, рекурсивно. Это то, что есть в моем файле .gitignore для этого:

# Use .gitignore to ignore a directory and its contents #
/some_directory/