Как удалить один файл из промежуточной области Git, но не удалить его из индекса или отменить изменения самого файла? - PullRequest
1119 голосов
/ 01 октября 2009

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

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

Ответы [ 15 ]

1746 голосов
/ 01 октября 2009

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

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

git reset HEAD -- <file>

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

git reset HEAD -- <directoryName>

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

Подробнее см. Справочную страницу git reset .

145 голосов
/ 07 мая 2010
git rm --cached FILE

git rm -r --cached CVS */CVS
84 голосов
/ 13 августа 2013

git reset <file>

Работает, есть ли у вас какие-либо предыдущие коммиты.

53 голосов
/ 21 февраля 2014

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

git reset HEAD -- <file>
15 голосов
/ 20 марта 2018
git reset filename.txt

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

6 голосов
/ 18 февраля 2017

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

git reset -p

или

git reset -p <file_name>

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

4 голосов
/ 04 января 2014

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

См. здесь .

2 голосов
/ 08 мая 2018

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

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

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

2 голосов
/ 31 октября 2017

Вы хотите:

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

  • Удалить файл из области подготовки

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

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

и решение

git reset HEAD file_name.ext

или

git reset HEAD path/to/file/file_name.ext
1 голос
/ 11 августа 2018

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

git add .

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

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

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

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

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

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

чтобы отключить их.

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