Как удалить файл из индекса в git?

Как удалить файл из индекса (= промежуточная область = кеш), не удаляя его из файловой системы?

Ответ 1

Вы хотите:

git rm --cached [file]

Если вы опустите параметр --cached, он также удалит его из рабочего дерева. git rm немного безопаснее, чем git reset, потому что вы будете предупреждены, если поэтапный контент не совпадает ни с концом ветки, ни с файлом на диске. (Если это не так, вам нужно добавить --force.)

Ответ 2

Это должно привести к остановке файла <file> для вас (без удаления или изменения другой информации):

git reset HEAD <file>

Ответ 3

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

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

  • git gui < - использует структуру оконного окна Tk - аналогичный стиль gitk
  • git cola < - более современный интерфейс GUI

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


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

  • git rm --cached [file]
  • git reset HEAD <file>

... у вас есть реальный шанс потерять данные - или, по крайней мере, трудно найти. Если вам действительно не нужно делать это с очень высокой частотой, с помощью инструмента GUI, вероятно, будет более безопасным.


Работа без индекса

Основываясь на комментариях и голосах, я понял, что многие люди постоянно используют индекс. Я не. Вот как:

  • Зафиксируйте всю мою рабочую копию (типичный случай): git commit -a
  • Зафиксируйте только несколько файлов: git commit (list of files)
  • Зафиксируйте все, кроме нескольких измененных файлов: git commit -a затем измените с помощью git gui
  • Графически просмотрите все изменения рабочей копии: git difftool --dir-diff --tool=meld