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

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

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

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

Ответы

Ответ 1

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

$ git rm `git ls-files -d`

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

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

Ответ 2

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

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

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

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

Ответ 3

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

$ git diff --name-only --diff-filter=D | xargs git rm

Ответ 4

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

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

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

Ответ 5

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

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