Постановка Видалених файлів


499

Скажіть, я маю файл у своєму сховищі git foo.

Припустимо, його видалено з rm(не git rm). Тоді статус git покаже:

Changes not staged for commit:

    deleted: foo

Як встановити етап видалення цього файлу?

Якщо я спробую:

git add foo

Він говорить:

'foo' did not match any files.

2
Це була проблема у старих версіях Git? Сьогодні це, здається, не є одним, він працює аналогічно модифікованим файлам.
cst1992

Відповіді:


22

Починаючи з Git 2.0.0, git addтакож буде проводитись видалення файлів.

Git 2.0.0 Документи - git-add

<pathspec>…

Файли для додавання вмісту з. Fileglobs (наприклад, * .c) можна надати, щоб додати всі> відповідні файли. Також ім'я провідної каталогів (наприклад, dir для додавання dir / file1 та dir / file2) може бути надано для оновлення індексу, щоб відповідати поточному стану каталогів у цілому (наприклад, вказавши dir записуватиме не лише файл dir / file1, змінений у робочому дереві до робочого дерева додано файл dir / file2, але також файл dir / file3, видалений із робочого дерева. Зверніть увагу, що більш старі версії Git використовувались для ігнорування видалених файлів; хочуть додати модифіковані або нові файли, але ігнорувати видалені файли.


Прийнята відповідь не вирішує проблему - а інші є більш громіздкими, оскільки Git 2.0.0 - це найкращий спосіб! Ви маєте мою позицію
Жоао Антунес,

518

Використовуйте git rm fooдля постановки файлу для видалення. (Це також видалить файл з файлової системи, якщо він раніше не був видалений. Звичайно, його можна відновити з git, оскільки він був попередньо зареєстрований.)

Для етапу видалення файлу, не видаляючи його з файлової системи, використовуйте git rm --cached foo


8
Також ви можете додати --cacheпрапор, щоб видалити файл лише з сховища, а також залишити недоторканим у файловій системі.
Hauleth

Який би був процес скасування цієї операції, тобто видалення файла для видалення? Це можливо?
longda

82
Насправді ОП запитав, як встановити вже вибраний файл, і це можна зробити git status | grep 'deleted:' | cut -d':' -f2 | xargs -t -I {} git add -u "{}". Інші відповіді, схоже, показують, як правильно поетапно видалити файли (але не як встановити вже видалені файли). пс. xargsкоманда на основі працює для мене на Ubuntu 12.04, однак , коли я вручну робити git add -u deleted_file.txtце doens't роботи. Мій git 1.7.9.5
Dimitry K

8
@DimitryK: з git rmрадістю поставить файл для видалення, навіть якщо його вже видалено з файлової системи. І як вказує коментар ОП щодо іншої відповіді, вони хотіли створити один конкретний файл, який уже був видалений.
Wooble

3
git rmне встановлює вже видалені файли. Він видає цю помилку: fatal: pathspec '~.SLDASM' did not match any files. Ось екрани з підтвердженням: i.imgur.com/cKNKGGe.png i.imgur.com/1p9JdWF.png . Перший знімок екрана чітко показує, що два файли видаляються та не ставляться, другий знімок екрана показує, що під час введення git rm "~$Box.SLDASM"він видає цю помилку.
KulaGGin

413

Незважаючи на те, що це правильне використання git rm [FILE], ви можете зробити це git add -u.

Відповідно до git-addдокументації:

-u - оновлення

Оновіть індекс саме там, де він вже має відповідність запису [FILE]. Це видаляє, а також змінює записи індексу, щоб відповідати робочому дереву, але не додає нових файлів.

Якщо при використанні параметра -u не вказано [FILE], усі відстежувані файли у всьому робочому дереві оновлюються (старі версії Git використовуються для обмеження оновлення до поточного каталогу та його підкаталогів).

Після цього індекс буде оновлений і файли будуть належним чином інсценовані.


56
Так git add -A ., додадуться всі зміни, я спеціально хотів поставити один видалений файл.
Андрій Томазос

25
Це додасть усі змінені файли; Не просто видалені файли.
раніше

3
Це правильно. Більш конкретно, він буде поетапно проводити всі зміни у файлах, які вже відстежуються, видалені або просто змінені. Це допомагає, коли ви видаляєте кілька файлів і не хочете їх ставити окремо.
Сайлеш

9
Чи є спосіб встановити лише видалені файли та не змінені? Просто цікаво.
серпень

11
Я зробив git add -u FolderWithDeletedFiles/це, і зробив те, що хочу, спасибі
парламент

158

Для постановки всіх видалених вручну файлів ви можете використовувати:

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

Щоб додати псевдонім до цієї команди як git rm-deleted, запустіть:

git config --global alias.rm-deleted '!git rm $(git ls-files --deleted)'

2
позначення $ (), очевидно, не існує в консолі Windows bash, що призводить доunknown option `deleted)
Фелікс Ганьон-Греньє,

2
Я не думаю, що це працює, якщо у вас також є пробіли. Принаймні, це не в моїй системі (з zsh).
Віл Шіплі

3
Для мене прекрасно працювали! Зробив саме те, що мені потрібно. ОГРОМНА вдячність тут!
RedSands

У windows dofor /F %I in ('git ls-files --deleted') do git add -u %I
eis

3
це не працює для назви файлів з пробілами, 'git add -u' робить, якщо потрібно.
J-Dizzle

33

додати всі готові видалені файли

git status -s | grep -E '^ D' | cut -d ' ' -f3 | xargs git add --all

вдячний чек, щоб переконатися

git status

вам слід добре піти


5
Підтвердження того, що це працює. Я думаю, що урок тут rm <file>git rm <file>
хотіти

1
FYI: розрізання пробілів спричиняє проблеми, якщо на будь-яких шляхах є пробіли
Девід,

1
це не працює для назви файлів з пробілами, 'git add -u' робить, якщо потрібно.
J-Dizzle

Відмінно працює для мене на git version 2.15.2 (Apple Git-101.1).
Калоб Таулінь

прекрасно працює на консолі Linux!
Ахмед АММУРІ



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.