Как удалить один файл из области подготовки (отменить git add)?

Ситуация: У меня есть репозиторий Git с файлами, уже находящимися в индексе. Я вношу изменения в несколько файлов, откройте Git и добавьте эти файлы в мою промежуточную область с помощью git add. "

Вопрос: Как удалить один из этих файлов из промежуточной области, но не удалить его из индекса или отменить изменения в самом файле?

Ответ 1

Если я правильно понимаю вопрос, вы просто хотите "отменить" git add которое было сделано для этого файла.

Если вам нужно удалить один файл из области подготовки, используйте

git reset HEAD -- <file>

Если вам нужно удалить весь каталог (папку) из области подготовки, используйте

git reset HEAD -- <directoryName>

Ваши модификации будут сохранены. Когда вы запустите git status файл снова будет отображаться как измененный, но еще не подготовленный.

См. Страницу руководства git reset для деталей.

Ответ 2

git rm --cached FILE

git rm -r --cached CVS */CVS

Ответ 3

git reset <file>

Работает ли у вас какие-либо предыдущие фиксации.

Ответ 4

Итак, небольшая настройка для Тима Хенигана отвечает: вам нужно использовать - перед именем файла. Это будет выглядеть так:

git reset HEAD -- <file>

Ответ 5

git reset filename.txt

Если у вас есть изменение в filename.txt, вы добавили его на сцену по ошибке и хотите удалить файл из промежуточной, но не хотите потерять изменения.

Ответ 6

Если вам просто нужно удалить подмножество изменений в файл, вы можете использовать:

git reset -p

или

git reset -p <file_name>

Эта команда в основном обратная сторона git add -p: она удалит только выбранные изменения из промежуточной области. Я нахожу его чрезвычайно полезным в "неудобном" то, что я добавил по ошибке.

Ответ 7

Если вы хотите удалить файлы по определенному шаблону и используете git rm --cached, вы также можете использовать шаблоны файловых глобусов.

Смотрите здесь

Ответ 8

Вы хотите:

  • Влияет на один файл

  • Удалить файл из промежуточной области

  • Не удалять один файл из индекса

  • Не отменяйте само изменение

и решение

git reset HEAD file_name.ext

или

git reset HEAD path/to/file/file_name.ext

Ответ 9

Когда вы делаете git status, Git сообщает вам, как выполнить unstatage:

Changes to be committed: (use "git reset HEAD <file>..." to unstage).

Так что git reset HEAD <file> работал для меня, и изменения не были затронуты.

Ответ 10

Если вы вносите изменения во многие отслеживаемые файлы, но хотите создать только несколько из них, выполните

git add.

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

и это не идеально делать кучу

git add path/to/file1 path/to/file2

если у вас много вложенных каталогов (что имеет место в большинстве проектов) - раздражает

Это когда Git GUI полезен (вероятно, только когда я его использую). Просто откройте Git GUI, он показывает разделенные и неподготовленные разделы файла. Выберите из промежуточного раздела файлы, которые вы хотите удалить, и нажмите

Ctrl+U (для окон)

расшатать их.

Ответ 11

Используйте эту команду для всех файлов, папок:

git reset *

Конечно, проверьте по команде:

git status

Ответ 12

Я думаю, что вы, вероятно, запутались с понятием индекса, как заметил @CB Bailey:

Зона подготовки является индексом.

Вы можете просто рассматривать промежуточный каталог и индекс как одно и то же.
Так что, как и ответ @Tim Henigan, я думаю:

Вы просто хотите "отменить" git add которое было сделано для этого файла.



Вот мой ответ:

Как правило, есть два способа отменить операцию этапа, как уже упоминалось в других ответах:

git reset HEAD <file>

а также

git rm --cached <file>

Но в чем разница?

Предположим, что файл был поставлен и существует в рабочем каталоге также использовать git rm --cached <file>, если вы хотите, чтобы удалить его из промежуточной директории, и сохранить файл в рабочем каталоге. Но обратите внимание, что эта операция не только удалит файл из промежуточного каталога, но также пометит файл как deleted в промежуточном каталоге, если вы используете

git status

после этой операции вы увидите это:

        deleted:    <file>

Это запись об удалении файла из промежуточной директории. Если вы не хотите сохранять эту запись и просто хотите отменить предыдущую операцию над файлом, используйте вместо этого git reset HEAD <file>.


-------- КОНЕЦ ОТВЕТА --------

PS: я заметил несколько упомянутых ответов:

git checkout -- <file>

Эта команда для ситуации, когда файл был поставлен, но файл был изменен в рабочем каталоге после того, как она была поставлена, использовать эту операцию, чтобы восстановить файл в рабочем каталог из устроив каталог. Другими словами, после этой операции изменения происходят в вашем рабочем каталоге, а НЕ в вашем промежуточном каталоге.

Ответ 13

Вам нужно находиться в каталоге файла, а затем ввести в терминал

следующее:
git reset HEAD .

Предполагается, что вам нужно reset только один файл.

Ответ 14

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

git reset HEAD -- .

Ответ 15

git checkout -- <file>

Он отлично работает для удаления файлов из области хранения

Ответ 16

В моем случае я делаю

git checkout -- FILE