Как удалить несколько удаленных файлов в репозитории Git - PullRequest
228 голосов
/ 15 мая 2011

Я удалил некоторые файлы, и состояние 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

Ответы [ 16 ]

620 голосов
/ 01 сентября 2012
git add -u 

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

91 голосов
/ 15 мая 2011

Будьте очень осторожны с 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.Это работает для любого количества файлов независимо от сходства (или различий) в именах.

50 голосов
/ 04 июля 2013

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

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

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

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

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

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

35 голосов
/ 23 апреля 2014

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

git add -u

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

git commit -m "note"
12 голосов
/ 11 января 2013

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

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

git ls-files --deleted | xargs git rm
8 голосов
/ 15 мая 2011

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

$ 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, чтобы подготовить все изменения, включая все удаленные файлы, а затем зафиксировать.

7 голосов
/ 08 июля 2012

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

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

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

5 голосов
/ 01 октября 2015

Попробуйте это:

 git rm `git ls-files -d`
3 голосов
/ 26 июня 2014

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

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

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

3 голосов
/ 26 февраля 2014

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

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

После того, как вы удалили файлы вручную.

...