Как удалить несколько удаленных файлов в репозитории 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
16 ответов
будьте очень осторожны о 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
опция (нет необходимости использовать regex или другие сложные 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 status | grep deleted | awk '{print "git rm " ;}' > ../remove.sh
сценарий, который создается remove.sh
и он содержит полный список git rm
команды.
Если вы хотите удалить все из них с помощью "git rm". Вот что я делаю:--2-->
git ls-files --deleted -z | xargs -0 git rm
этот запрос содержит список всех файлов, которые были удалены, и удаляет их из репозитория git. Надеюсь, это поможет.
у меня была эта проблема призрачных файлов, появляющихся в моем РЕПО после того, как я удалил их и наткнулся на эту аккуратную команду!
git add -A
это по существу то же самое, что git add -a
и git add -u
комбинированный,но чувствительный к регистру. Я получил его от!--8-->эта удивительная ссылка (эта ссылка указывает на версию on archive.org теперь, потому что оригинал преобразован в страницу спама / фишинга по состоянию на июнь 2016 года)
вот как обнаружить удаленные файлы и этап их удаления в рамках следующей фиксации. Все решения по этой теме имеют разные достоинства. Это решение ниже конкретно касается проблемы имен файлов с пробелами в них.
git status --porcelain | awk '/^.D .*$/ {print }' | sed 's/.D \(.*\)//' | tr -d '"' | xargs -I {} git rm '{}'
убедитесь, что вы проверяете это с помощью опции --dry-run git, прежде чем запускать ее со следующим:
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, заключенным в одинарные кавычки, чтобы убедиться, что он поддерживает имена файлов с пробелами.