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

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

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

8 ответов


вы можете дать шаблоны для 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

Проверьте manpage для xargs дополнительные параметры (esp. если слишком много файлов).


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


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

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


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

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


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


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

git add -u

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


В Windows 10, используя git Bash, из .gitignore расположение в файловой структуре.

git rm -r --cached some_directory/

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

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