Как удалить несколько удаленных файлов в репозиторий Git

Я удалил несколько файлов, и статус git отображается, как показано ниже.

Я совершил и толкнул.

GitHub все еще показывает удаленные файлы в репозитории. Как удалить файлы в репозитории GitHub?

# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    modules/welcome/language/english/kaimonokago_lang.php
#   deleted:    modules/welcome/language/french/kaimonokago_lang.php
#   deleted:    modules/welcome/language/german/kaimonokago_lang.php
#   deleted:    modules/welcome/language/norwegian/kaimonokago_lang.php

Если я использую git rm, он дает следующее.

usage: git rm [options] [--] <file>...

-n, --dry-run         dry run
-q, --quiet           do not list removed files
--cached              only remove from the index
-f, --force           override the up-to-date check
-r                    allow recursive removal
--ignore-unmatch      exit with a zero status even if nothing matched
+215
14 мая '11 в 20:00
источник поделиться
16 ответов
git add -u 

обновляет все ваши изменения.

+593
01 сент. '12 в 16:48
источник

Будьте очень осторожны в отношении git rm .; он может удалить больше, чем вы хотите. Конечно, вы можете восстановиться, но это проще не делать.

Простейшим может быть:

git rm modules/welcome/language/english/kaimonokago_lang.php \
       modules/welcome/language/french/kaimonokago_lang.php \
       modules/welcome/language/german/kaimonokago_lang.php \
       modules/welcome/language/norwegian/kaimonokago_lang.php

Вы не можете использовать групповые символы оболочки, поскольку файлы не существуют, но вы можете использовать (по крайней мере, в Bash):

git rm modules/welcome/language/{english,french,german,norwegian}/kaimonokago_lang.php

Или рассмотрим:

git status | sed -n '/^# *deleted:/s///p' | xargs git rm

Это выводит результат git status, по умолчанию не печатает (sed -n), но в строках, начинающихся с # deleted:, он избавляется от # и deleted: и печатает, что осталось; xargs собирает аргументы и предоставляет их команде git rm. Это работает для любого количества файлов независимо от сходства (или несходства) в именах.

+89
14 мая '11 в 20:22
источник

Другая версия для ответа ByScripts -

git rm $(git ls-files --deleted)

Это ТОЛЬКО удалит удаленные файлы из git.

Его также можно использовать для добавления ТОЛЬКО модифицированных файлов.

git add $(git ls-files --modified)

Эти команды также работают на gitbash для окон.

+49
04 июл. '13 в 18:40
источник

Обновите все сделанные вами изменения:

git add -u

Удаленные файлы должны измениться с нестационарного (обычно красного цвета) на поставленный (зеленый). Затем зафиксируйте удаление удаленных файлов:

git commit -m "note"
+34
23 апр. '14 в 0:45
источник

Лучшее решение, если вам не нужно создавать измененные файлы, - это использовать git add -u, как указано mshameers и/или pb2q.

Если вы просто хотите удалить удаленные файлы, но не сгенерировать какие-либо измененные, я думаю, вы должны использовать аргумент ls-files с опцией --deleted (нет необходимости использовать регулярное выражение или другие сложные аргументы/параметры):

git ls-files --deleted | xargs git rm
+11
11 янв. '13 в 12:46
источник

Да, git rm <filename> будет обрабатывать удаленное состояние файла, где <filename> может быть шаблоном glob:

$ git rm modules/welcome/language/*/kaimonokago_lang.php
rm modules/welcome/language/english/kaimonokago_lang.php
rm modules/welcome/language/french/kaimonokago_lang.php
rm modules/welcome/language/german/kaimonokago_lang.php
rm modules/welcome/language/norwegian/kaimonokago_lang.php

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    modules/welcome/language/english/kaimonokago_lang.php
#       ...

Затем вы можете зафиксировать.

git commit -a сделает это за один раз, если вы захотите.

Вы также можете использовать git add -u для выполнения всех изменений, включая все удаленные файлы, а затем совершить.

+8
14 мая '11 в 20:06
источник

Когда у меня есть много файлов, которые я удалил, которые были неустановленными для фиксации, вы можете git rm их всех в одном шоу с помощью:

for i in `git status | grep deleted | awk '{print $3}'`; do git rm $i; done

Как упоминал вопросник, будьте осторожны с git rm.

+7
08 июл. '12 в 8:15
источник

Попробуйте следующее:

 git rm `git ls-files -d`
+5
01 окт. '15 в 11:03
источник

Вы можете создать оболочку script, которая удалит все ваши файлы при запуске:

git status | grep deleted | awk '{print "git rm " $3;}' > ../remove.sh

Созданный script - remove.sh и содержит полный список команд git rm.

+3
26 июн. '14 в 1:32
источник

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

git commit -m "remove files" -a
git push

После удаления файлов вручную.

+3
25 февр. '14 в 22:17
источник
git add -u .

git add --update .
+2
17 авг. '15 в 1:47
источник
git status | sed 's/^#\s*deleted:\s*//' | sed 's/^#.*//' | xargs git rm -rf
+2
12 нояб. '12 в 2:12
источник

Если вы хотите удалить все из них, используя "git rm". Это то, что я делаю:

git ls-files --deleted -z | xargs -0 git rm

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

+2
29 сент. '13 в 12:34
источник

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

git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm '{}'

убедитесь, что вы проверили это с помощью опции git --dry-run перед запуском со следующим:

git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm --dry-run '{}'

объяснение:

git status --porcelain

Это печатает что-то вроде D "/путь к папке/пути к файлу" которое происходит только тогда, когда в именах путей есть пробелы

awk '/^.D .*$/ {print $0}'

соответствуют только строки, начинающиеся с "D"

sed 's/ D \(.*\)/\1/'

удалите "D" с фронта каждой строки

tr -d '"'

удалить кавычки, если есть

xargs -I {} git rm '{}'

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

+1
21 мар. '15 в 19:26
источник

У меня была проблема с файлами-призраками, появляющимися в моем репо после того, как я удалил их и наткнулся на эту опрятную команду!

git add -A

Это по существу то же самое, что и git add -A и git add -u, но с учетом регистра. Я получил его из эту удивительную ссылку (теперь эта ссылка указывает на версию на archive.org, потому что оригинал был преобразован на страницу спама/фишинга по состоянию на июнь 2016 года)

+1
28 авг. '13 в 15:10
источник

Встроенная функция очистки также может быть полезна...

git clean -fd
+1
09 апр. '13 в 18:51
источник

Посмотрите другие вопросы по меткам или Задайте вопрос