Ответ 1
git add -u
обновляет все ваши изменения.
Я удалил несколько файлов, и статус 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
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
собирает аргументы и предоставляет их команде git rm
. Это работает для любого количества файлов независимо от сходства (или несходства) в именах.
Другая версия для ответа ByScripts -
git rm $(git ls-files --deleted)
Это ТОЛЬКО удалит удаленные файлы из git.
Его также можно использовать для добавления ТОЛЬКО модифицированных файлов.
git add $(git ls-files --modified)
Эти команды также работают на gitbash для окон.
Обновите все сделанные вами изменения:
git add -u
Удаленные файлы должны измениться с нестационарного (обычно красного цвета) на поставленный (зеленый). Затем зафиксируйте удаление удаленных файлов:
git commit -m "note"
Лучшее решение, если вам не нужно создавать измененные файлы, - это использовать git add -u
, как указано mshameers и/или pb2q.
Если вы просто хотите удалить удаленные файлы, но не сгенерировать какие-либо измененные, я думаю, вы должны использовать аргумент ls-files
с опцией --deleted
(нет необходимости использовать регулярное выражение или другие сложные аргументы/параметры):
git ls-files --deleted | xargs git rm
Да, 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
для выполнения всех изменений, включая все удаленные файлы, а затем совершить.
Когда у меня есть много файлов, которые я удалил, которые были неустановленными для фиксации, вы можете git rm
их всех в одном шоу с помощью:
for i in `git status | grep deleted | awk '{print $3}'`; do git rm $i; done
Как упоминал вопросник, будьте осторожны с git rm
.
Попробуйте следующее:
git rm `git ls-files -d`
Вы можете использовать
git commit -m "remove files" -a
git push
После удаления файлов вручную.
Вы можете создать оболочку script, которая удалит все ваши файлы при запуске:
git status | grep deleted | awk '{print "git rm " $3;}' > ../remove.sh
Созданный script - remove.sh
и содержит полный список команд git rm
.
git status | sed 's/^#\s*deleted:\s*//' | sed 's/^#.*//' | xargs git rm -rf
Если вы хотите удалить все из них, используя "git rm". Это то, что я делаю:
git ls-files --deleted -z | xargs -0 git rm
Этот список запросов всех файлов, которые были удалены, и удалить их из репозитория git. Надеюсь, поможет.
git add -u .
git add --update .
Встроенная функция очистки также может быть полезна...
git clean -fd
У меня была проблема с файлами-призраками, появляющимися в моем репо после того, как я удалил их и наткнулся на эту опрятную команду!
git add -A
Это по существу то же самое, что и git add -A
и git add -u
, но с учетом регистра. Я получил его из эту удивительную ссылку (теперь эта ссылка указывает на версию на archive.org, потому что оригинал был преобразован на страницу спама/фишинга по состоянию на июнь 2016 года)
Вот как обнаружить удаленные файлы и сместить их удаление как часть следующего коммита. Все решения этой темы имеют разные достоинства. В этом решении конкретно рассматривается проблема имен файлов с пробелами в них.
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, заключенное в одинарные кавычки, чтобы убедиться, что оно поддерживает имена файлов с пробелами.