Как добавлять и совершать удаления, сделанные с помощью «rm» вместо «git rm»?

17

Я удалил кучу файлов и каталогов из репозитория Git, используя rm , Finder и т. д.

Я ищу команду Git, которая будет записывать их в индекс, как отмечено для удаления, как если бы я набрал git rm на них.

Я понимаю, что git add -u сделает это, наряду с кучей других вещей. Я бы хотел, чтобы моя команда обрабатывала только удаление.

    
задан kch 06.12.2009 в 22:23
источник
  • Связанный, но не точный дубликат: удаление нескольких файлов из репозитория Git, которые уже были удалены с диска. В другом вопросе уже говорится, что git rm может обрабатывать удаленные файлы, он просто ищет способ сгенерировать их все с помощью одного вызова git rm. –  Removing multiple files from a Git repo that have already been deleted from disk 05.08.2014 в 17:19

5 ответов

31

Без пробелов в именах файлов:

$ git rm 'git ls-files -d'

Более надежный:

$ git ls-files -z -d | xargs -0 --no-run-if-empty git rm
    
ответ дан Greg Bacon 06.12.2009 в 22:34
источник
  • Обратите внимание, что его нужно запускать из каталога верхнего уровня вашего репо. –  Greg Bacon 06.12.2009 в 23:04
5

Посмотрите, что написал Jonio C Hamano в " Re: [PATCH 1/2] Документация : «git add -A« может удалить файлы »в списке рассылки git, а именно, что этот вопрос выглядит как XY проблема (вы спрашиваете о предполагаемом решении проблемы Y, а не о самой проблеме X). Решение проблемы (если это действительно «ситуация с XY проблемой») может быть:

  • git commit -a , который автоматически удаляет удаления, фиксируя текущее состояние отслеживаемых файлов в рабочем каталоге

  • git add -A , который добавит не проигнорированные неиспользуемые файлы и удалит уже существующие файлы, например. если вы хотите создать фиксацию в боковом обновлении рабочего каталога, например. распаковка моментального снимка или результат rsync.

Тем не менее, если вы просите проблему (а не решение), то, как вы можете видеть из других ответов, для этого есть инструменты.

    
ответ дан Jakub Narębski 07.12.2009 в 01:55
источник
4

Ответ Чарльза Бейли подтолкнул меня к этому, но я все еще приветствую что-то более короткое.

$ git diff --name-only --diff-filter=D | xargs git rm
    
ответ дан kch 06.12.2009 в 22:33
источник
2

В Git 2.0 git add ведет себя как git add --ignore-removal <pathspec> , который игнорирует пути, которые вы удалили из рабочего дерева.

Вы можете использовать git add --all <pathspec> для записи удаления.

Запустите git status , чтобы проверить пути, которые вы удалили из рабочего дерева.

    
ответ дан Stephen Quan 14.07.2014 в 06:34
источник
0

Эта команда предоставит вам список всех удаленных файлов, которые будут отправлены в git rm. Таким образом, все файлы будут удалены. Если удаленных файлов не обнаружено, ничего не произойдет:

git ls-files -z -d | xargs -0 --no-run-if-empty git rm     

ответ дан Roman 26.06.2014 в 13:30
источник