Как добавить и зафиксировать удаления, сделанные с помощью «rm» вместо «git rm»? - PullRequest
18 голосов
/ 07 декабря 2009

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

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

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

Ответы [ 5 ]

33 голосов
/ 07 декабря 2009

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

$ git rm `git ls-files -d`

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

$ git ls-files -z -d | xargs -0 --no-run-if-empty git rm
5 голосов
/ 07 декабря 2009

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

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

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

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

4 голосов
/ 07 декабря 2009

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

$ git diff --name-only --diff-filter=D | xargs git rm
2 голосов
/ 14 июля 2014

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

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

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

0 голосов
/ 26 июня 2014

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...