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