Удаление нескольких файлов из репозитория Git, которые уже были удалены с диска

У меня есть Git repo, что я удалил четыре файла с помощью 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 ., если это возможно.

1246
задан 29 янв. '09 в 20:18
источник поделиться
29 ответов

Для Git 1.x

$ git add -u

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

Для Git 2.0

Чтобы скомпоновать все дерево работы:

$ git add -u :/

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

$ git add -u .
2232
ответ дан 10 сент. '09 в 3:13
источник
git ls-files --deleted -z | xargs -0 git rm 

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

1339
ответ дан 28 февр. '11 в 23:21
источник

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

git add -u

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

git commit -m "Deleted files manually"
726
ответ дан 29 янв. '09 в 20:25
источник

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

git add -u

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

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

git commit -a

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

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

git ls-files --deleted -z | xargs -0 git rm
git commit
354
ответ дан 10 сент. '09 в 3:15
источник

Возможно, вы ищете -A:

git add -A

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

163
ответ дан 29 янв. '09 в 21:10
источник

Чтобы подготовить только удаленные файлы:

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

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

92
ответ дан 26 нояб. '11 в 13:34
источник
git rm test.txt

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

60
ответ дан 10 сент. '09 в 3:13
источник

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

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

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

48
ответ дан 31 янв. '09 в 7:50
источник

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

git add -u 

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

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

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

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

38
ответ дан 09 апр. '12 в 14:24
источник

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

git commit -a

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

28
ответ дан 29 янв. '09 в 20:29
источник
git ls-files --deleted | xargs git rm 

- лучший вариант для добавления только удаленных файлов.

Вот некоторые другие варианты.

git add .  => Add all (tracked and modified)/new files in the working tree.

git add -u => Add all modified/removed files which are tracked.

git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree.

git commit -a -m "commit message" - Add and commit modified/removed files which are tracked.
19
ответ дан 01 окт. '12 в 22:36
источник

git add -u

-u --Обновить Только совпадение с уже отслеживаемыми файлами в индексе, а не с рабочим деревом. Это означает, что он никогда не будет создавать новые файлы, но будет изменен новый контент отслеживаемых файлов и что он удалит файлы из индекса, если соответствующие файлы в рабочем дереве были удалены.

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

15
ответ дан 26 авг. '14 в 15:24
источник

Это простое решение отлично подходит для меня:

git rm $(git ls-files --deleted)
14
ответ дан 06 нояб. '15 в 16:32
источник

Если вы хотите добавить его в свой .gitconfig, выполните следующие действия:

[alias]
  rma = !git ls-files --deleted -z | xargs -0 git rm

Затем все, что вам нужно сделать, запускается:

git rma
10
ответ дан 25 июля '12 в 23:47
источник
git ls-files --deleted -z | xargs -0 git rm --cached

Это приведет к удалению всех удаленных файлов, которые ранее отслеживались с помощью git, а также обрабатывать случай, когда в ваших именах есть пробелы.

В зависимости от вашего варианта POSIX вам может потребоваться использовать xargs -0 -r: это приведет к тому, что xargs будет изящно выйти при нулевом контенте.

EDIT: флаги --cached и --deleted используются в тандеме для защиты от случайного удаления файлов, которые еще не были удалены.

8
ответ дан 04 янв. '14 в 23:34
источник

Попробуйте.

-a
--all
Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.

git add . && git commit -m -a "Your commit"

или

git add --all && git commit -m "Your commit"
6
ответ дан 09 марта '15 в 18:05
источник

Пожалуйста, используйте -t, чтобы увидеть, какая команда на самом деле запущена

Я только что изменил ответ Вирдера, чтобы сделать то же самое:

git ls-files --deleted -z | xargs -t -0 git rm
6
ответ дан 17 апр. '16 в 18:00
источник

Следующее будет работать, даже если у вас есть много файлов для обработки:

git ls-files --deleted | xargs git rm

Вы, вероятно, также захотите оставить комментарий.

Подробности смотрите в: Полезные скрипты Git

5
ответ дан 24 мая '13 в 16:45
источник

Ни один из флагов в git -add не будет удалять только удаленные файлы; если все, что вы изменили, - это удаленные файлы, то вы в порядке, но в противном случае вам нужно запустить git -status и проанализировать вывод.

Отработка ответа Джереми, вот что я получил:

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  • Получить статус файлов.
  • Для удаленных файлов выделите имя файла.
  • Удалите все строки, начинающиеся С#, а также строку состояния, в которой есть слово "deleted"; Я не помню, что это было, точно, и этого больше нет, поэтому вам может потребоваться изменить это для разных ситуаций. Я думаю, что группировка выражений может быть специфичной для GNU, поэтому, если вы не используете gnutils, вам может потребоваться добавить несколько строк grep -v.
  • Передайте файлы в git rm.

Вставить это в псевдоним оболочки...

5
ответ дан 26 июля '09 в 2:41
источник

Как упоминалось

git add -u

удаляет удаленные файлы для удаления, НО ТАКЖЕ модифицированные файлы для обновления.

Чтобы отключить измененные файлы, вы можете сделать

git reset HEAD <path>

если вы хотите, чтобы ваши коммиты были организованы и чисты.
ПРИМЕЧАНИЕ: Это может также привести к удалению удаленных файлов, поэтому будьте осторожны с этими подстановочными знаками.

4
ответ дан 21 февр. '12 в 21:43
источник
git commit -m 'commit msg' $(git ls-files --deleted)

Это сработало для меня после того, как я уже удалил файлы.

4
ответ дан 05 авг. '14 в 17:40
источник

Мне нужно было то же самое и использовала кнопку git gui "changed changed". он также добавляет все.

И после "смены стадии" я сделал "commit"...

поэтому мой рабочий каталог снова очищается.

3
ответ дан 15 нояб. '11 в 17:29
источник

Вы можете использовать git add -u <filenames> для размещения только удаленных файлов.

Например, если вы удалили файлы templates/*.tpl, используйте git add -u templates/*.tpl.

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

2
ответ дан 07 марта '13 в 4:29
источник

(Еще одно изменение)

Я хотел удалить все уже удаленные из файлов диска, но из одной конкретной папки, оставив другие папки нетронутыми. Для меня работали следующие:

git ls-files --deleted  | grep <folder-name> | xargs git rm
1
ответ дан 23 нояб. '16 в 13:32
источник

что-то вроде

git status | sed -s "s/^.*deleted: //" | xargs git rm 

может это сделать.

1
ответ дан 29 янв. '09 в 20:28
источник

Добавление системного псевдонима для размещения удаленных файлов в виде команды 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.

1
ответ дан 19 февр. '14 в 15:16
источник

Для проекта визуальной студии

'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm' 

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

0
ответ дан 04 февр. '14 в 18:34
источник
git rm $(git ls-files -d)

Удаляет все файлы, перечисленные командой git ls-files (-d показывает только удаленные файлы). Не работает для файлов с пробелами в имени файла или пути, но просто запомнить

0
ответ дан 10 дек. '18 в 11:19
источник

Наиболее гибким решением, которое я нашел на сегодняшний день, является

git cola

И выберите все удаленные файлы, которые я хочу выполнить.

(Примечание. Обычно я делаю все командную строку в git, но git обрабатывает удаленные файлы немного неудобно).

-1
ответ дан 03 окт. '12 в 17:28
источник

Другие вопросы по меткам или Задайте вопрос