У меня есть репозиторий Git, в котором я удалил четыре файла rm
( не git rm
), и мой статус Git выглядит следующим образом:
# deleted: file1.txt
# deleted: file2.txt
# deleted: file3.txt
# deleted: file4.txt
Как удалить эти файлы из Git без необходимости вручную проходить и добавлять каждый файл следующим образом:
git rm file1 file2 file3 file4
В идеале я ищу что-то, что работает так же, как git add .
и, если это возможно.
git
git-commit
git-add
git-rm
Codebeef
источник
источник
git rm
, удаление могло быть из отдельного инструмента, IDE или файлового менеджера. Visual Studio для одного может быть проблемой при удалении / переименовании файлов.git rm
немного похоже на вопрос, почему они не используютgit vim
илиgit cd
. Это глупо, и в git должна быть встроенная команда или псевдоним для удаления удаленных файлов из промежуточного уровня, и вам не нужно искать его на SO или читать справочные страницы на обеденном перерыве.Ответы:
Для Git 1.x
Это заставляет git автоматически ставить отслеживаемые файлы, включая удаление ранее отслеженных файлов.
Для Git 2.0
Чтобы подготовить все ваше рабочее дерево:
Чтобы поставить только текущий путь:
источник
git add -u folder/
запустить эту операцию в папкеможет быть то, что вы ищете .. это работает для меня ..
источник
git ls-files --deleted -z | xargs -0 git rm
Ты можешь использовать
Чтобы добавить удаленные файлы в промежуточную область, затем передайте их
источник
Если вы просто запустите:
git обновит свой индекс, чтобы знать, что удаленные вами файлы должны быть частью следующего коммита. Затем вы можете запустить «git commit», чтобы проверить это изменение.
Или, если вы запустите:
Он автоматически примет эти изменения (и любые другие) и зафиксирует их.
Обновление : если вы хотите добавить только удаленные файлы, попробуйте:
источник
git commit -a
Хорошо , буду делать то, что я хочу, за исключением некоторых случаев, когда у меня есть файлы, которые я не хочу фиксировать, поэтому я хочу подготовить коммит вручную.Вы, вероятно, ищете -A:
это похоже на git add -u, но также добавляет новые файлы. Это примерно соответствует команде hg
addremove
(хотя обнаружение движения происходит автоматически).источник
Чтобы подготовить только удаленные файлы:
Или (способ xargs):
Вы можете использовать псевдоним предпочитаемого набора команд для удобного последующего использования.
источник
xargs
это около 15 минут, чтобы освоить.git status | awk '/deleted/ {print $3}' | xargs git rm
был бы более короткий способ сделать это.grep | awk
... Просто скажи нет.git rm $(git ls-files --deleted)
Разве это не удобнее (скопировано с этого ).git ls-files --deleted | while read f; do git rm $f; done
xargs
, вероятно, более эффективен, чем цикл while для огромного списка, поскольку он передает более одного аргумента при каждом выполненииgit rm
. Чтобы ограничить количество аргументов, передаваемых приgit rm
каждом его выполнении, используйте-n
параметр:git ls-files --deleted | xargs -n 15 git rm
До или после удаления самого файла.
источник
rm
сожалею об этом позже.git add -u
? Кажется, что было бы безопаснее добавить определенные файлы, которые были удалены в коммит, а не добавлять ВСЕ изменения.Используя git-add с опциями '--all' или '--update', вы можете получить больше, чем вы хотели. Новые и / или измененные файлы также будут добавлены в индекс. У меня есть настройка псевдонима bash для случаев, когда я хочу удалить удаленные файлы из git, не касаясь других файлов:
Все файлы, которые были удалены из файловой системы, добавляются в индекс как удаленные.
источник
Не то чтобы это действительно имело значение, но я не согласен с выбранным ответом:
... удалит файлы из индекса, если соответствующие файлы в рабочем дереве были удалены, но при этом будет также изменено новое содержимое отслеживаемых файлов.
... с другой стороны, будут только удаленные файлы, которые были отслежены.
Так что последнее, на мой взгляд, является лучшим вариантом.
источник
Если это единственные изменения, вы можете просто сделать
совершить все изменения. Это будет включать в себя удаленные файлы.
источник
это лучший вариант, чтобы добавить только удаленные файлы.
Вот еще несколько вариантов.
источник
git add -u
-u --update Сравнение только с уже отслеженными файлами в индексе, а не с рабочим деревом. Это означает, что он никогда не будет ставить новые файлы, а будет модифицировать новое содержимое отслеживаемых файлов и будет удалять файлы из индекса, если соответствующие файлы в рабочем дереве были удалены.
Если нет, по умолчанию используется «.»; другими словами, обновите все отслеживаемые файлы в текущем каталоге и его подкаталогах.
источник
git add -u
. Откуда все остальные вещи в вашем ответе, документация? Вы должны сослаться на документацию и сделать кавычки, если это так.Это простое решение прекрасно работает для меня:
источник
Если вы хотите добавить это к себе,
.gitconfig
сделайте это:Тогда все, что вам нужно сделать, это запустить:
источник
git config --global alias.rmd '!git ls-files --deleted -z | xargs -0 git rm'
Это удалит все удаленные файлы, которые ранее отслеживались git, а также обработает случай, когда в ваших именах файлов есть пробелы.
В зависимости от вашего варианта POSIX вам может понадобиться использовать
xargs -0 -r
: это приведетxargs
к изящному завершению при передаче пустого содержимого.РЕДАКТИРОВАТЬ:
--cached
и--deleted
флаги используются в тандеме для защиты от случайного удаления файлов, которые еще не были удалены.источник
Скажите команде автоматически создавать файлы, которые были изменены и удалены, но новые файлы, о которых вы не сообщили Git, не будут затронуты:
или
источник
Следующее будет работать, даже если у вас много файлов для обработки:
Вы, вероятно, также захотите оставить комментарий.
Подробности смотрите в: Полезные скрипты Git
источник
Пожалуйста, используйте,
-t
чтобы увидеть, какая команда на самом деле выполняетсяЯ просто подправил ответ Вирендера, чтобы сделать то же самое:
источник
Ни один из флагов git-add не ставит только удаленные файлы; если все, что вы изменили, это удаленные файлы, то все в порядке, но в противном случае вам нужно запустить git-status и проанализировать вывод.
Отрабатывая ответ Джереми, вот что я получил:
grep -v
строк.git rm
.Вставить это в псевдоним оболочки сейчас ...
источник
Как уже упоминалось
готовит удаленные файлы для удаления, НО ТАКЖЕ изменяет файлы для обновления.
Для удаления измененных файлов вы можете сделать
если вы хотите, чтобы ваши коммиты были организованы и чисты.
ПРИМЕЧАНИЕ. Это также может привести к отмене удаления удаленных файлов, поэтому будьте осторожны с этими подстановочными знаками.
источник
Это сработало для меня после того, как я уже удалил файлы.
источник
Мне нужно было то же самое, и я использовал кнопку git gui «поменялся сценой» это также добавляет все.
И после того, как "сцена изменилась", я сделал "совершить" ...
так что мой рабочий каталог снова чистый.
источник
Удаляет все файлы, перечисленные
git ls-files
командой (-d показать только удаленные файлы). Не работает для файлов с пробелами в имени файла или пути, но просто запомнитьисточник
Вы можете использовать только
git add -u <filenames>
для удаления удаленных файлов.Например, если вы удалили файлы
templates/*.tpl
, то используйтеgit add -u templates/*.tpl
.-u
Требуется для того , чтобы ссылаться на файлы , которые не существуют в хранилище , но в рабочем каталоге больше не существует. В противном случае по умолчаниюgit add
используется поиск файлов в рабочем каталоге, и если вы укажете удаленные файлы, он их не найдет.источник
Добавление системного псевдонима для размещения удаленных файлов в качестве команды
rm-all
UNIX
alias rm-all='git rm $(git ls-files --deleted)'
WINDOWS
doskey rm-all=bash -c "git rm $(git ls-files --deleted)"
Запись
Windows должна быть
bash
установлена.источник
(Еще один вариант)
Я хотел удалить все уже удаленные с диска файлы, кроме одной конкретной папки, оставив остальные папки нетронутыми. Следующее работало для меня:
источник
что-то вроде
может сделать это
источник
git diff --diff-filter=D --name-only | xargs git rm
Для визуального студийного проекта
что полезно, когда в пути к удаленному файлу есть место
источник
Наиболее гибким решением, которое я нашел на сегодняшний день, является
И выберите все удаленные файлы, которые я хочу поставить.
(Обратите внимание, я обычно делаю все командные строки в git, но git обрабатывает удаленные файлы немного неловко).
источник
git add -u path/to/my/deleted-files-pattern-*.yml
так что это был лучший ответ для меня (не желая размещать все удаленные файлы, но 50 из пары сотен).