Удаление нескольких файлов из репозитория Git, которые уже были удалены с диска - PullRequest
1275 голосов
/ 29 января 2009

У меня есть репозиторий 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 ., если это возможно.

Ответы [ 29 ]

2261 голосов
/ 10 сентября 2009

Для Git 1.x

$ git add -u

Это указывает git автоматически ставить отслеживаемые файлы, включая удаление ранее отслеженных файлов.

Для Git 2.0

Чтобы подготовить все ваше рабочее дерево:

$ git add -u :/

Чтобы поставить только текущий путь:

$ git add -u .
1345 голосов
/ 28 февраля 2011
git ls-files --deleted -z | xargs -0 git rm 

может быть то, что вы ищете .. это работает для меня ..

729 голосов
/ 29 января 2009

Вы можете использовать

git add -u

Чтобы добавить удаленные файлы в область подготовки, затем зафиксировать их

git commit -m "Deleted files manually"
355 голосов
/ 10 сентября 2009

Если вы просто запустите:

git add -u

git обновит свой индекс, чтобы знать, что удаленные вами файлы должны быть частью следующего коммита. Затем вы можете запустить «git commit», чтобы зафиксировать это изменение.

Или, если вы запустите:

git commit -a

Он автоматически примет эти (и любые другие) изменения и зафиксирует их.

Обновление : Если вы хотите добавить только удаленные файлы, попробуйте:

git ls-files --deleted -z | xargs -0 git rm
git commit
165 голосов
/ 29 января 2009

Вы, вероятно, ищете -A:

git add -A

это похоже на git add -u, но также добавляет новые файлы. Это примерно эквивалентно команде hg addremove (хотя обнаружение движения автоматическое).

92 голосов
/ 26 ноября 2011

На этапе только удаленные файлы:

for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done

Или (путь xargs):

git status | awk '/deleted/ {print $2}' | xargs git rm

Вы можете псевдоним предпочитаемый набор команд для удобного последующего использования.

61 голосов
/ 10 сентября 2009
git rm test.txt

До или после удаления самого файла.

48 голосов
/ 31 января 2009

Используя git-add с опциями '--all' или '--update', вы можете получить больше, чем вы хотели. Новые и / или измененные файлы также будут добавлены в индекс. У меня есть настройка псевдонима bash, когда я хочу удалить удаленные файлы из git, не касаясь других файлов:

alias grma='git ls-files --deleted -z | xargs -0 git rm'

Все файлы, которые были удалены из файловой системы, добавляются в индекс как удаленные.

38 голосов
/ 09 апреля 2012

Не то чтобы это действительно имеет значение, но я не согласен с выбранным ответом:

git add -u 

... удалит файлы из индекса, если соответствующие файлы в рабочем дереве были удалены, но также внесет изменения в новое содержимое отслеживаемых файлов.

git rm $(git ls-files --deleted)

... с другой стороны, будут только отслеженные удаленные файлы.

Так что последнее, на мой взгляд, является лучшим вариантом.

29 голосов
/ 29 января 2009

Если это единственные изменения, вы можете просто сделать

git commit -a

для фиксации всех изменений. Это будет включать в себя удаленные файлы.

...