Как удалить несколько удаленных файлов в репозитории 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 224

16 ответов:

git add -u 

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

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

еще одна версия для ByScripts ответ

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

это приведет только к удалению удаленных файлов из git.

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

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

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

обновить все внесенные изменения:

git add -u

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

git commit -m "note"

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

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

git ls-files --deleted | xargs git rm

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

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

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

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

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

 git rm `git ls-files -d`

можно использовать

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

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

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

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

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

git status | sed 's/^#\s*deleted:\s*//' | sed 's/^#.*//' | xargs git rm -rf
git add -u .

git add --update .

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

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

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

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

git clean -fd

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

git add -A

это по сути то же самое, что git add -a и git add -u комбинированный,но он чувствителен к регистру. Я получил его от!--8-->эта удивительная ссылка (эта ссылка указывает на версию ВКЛ archive.org теперь, потому что оригинал преобразован в страницу спама / фишинга по состоянию на июнь 2016 года)

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

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

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

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

объяснение:

git status --porcelain

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

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

совпадают только строки, которые начинаются с "D"

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

удалить " D " из передней части каждой строки

tr -d '"'

удалить кавычки, если таковые имеются

xargs -I {} git rm '{}'

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