Как удалить файл из индекса (= область размещения = кэш), не удаляя его из файловой системы?
Как удалить файл из индекса (= область размещения = кэш), не удаляя его из файловой системы?
Ответы:
Ты хочешь:
git rm --cached [file]
Если вы пропустите --cachedопцию, она также будет удалена из рабочего дерева. git rmнемного безопаснее, чем git reset, потому что вы будете предупреждены, если промежуточный контент не соответствует ни концу ветви, ни файлу на диске. (Если этого не произойдет, вы должны добавить --force.)
git rm --cachedчтобы удалить их из репозитория, добавить соответствующие файлы или каталоги в .gitignore, подготовить и зафиксировать как обычно. Они исчезнут из репо, но останутся нетронутыми в вашем локальном дереве, и вы случайно не зарегистрируете их снова.
Это должно отменить удаление файла <file> (без удаления или иного изменения файла):
git reset <file>
HEAD.
HEAD!
git reset HEAD <file>
для удаления конкретного файла из индекса.
а также
git reset HEAD
для удаления всех проиндексированных файлов.
В зависимости от вашего рабочего процесса, это может быть тот тип вещей, которые вам нужны достаточно редко, так что нет смысла пытаться найти решение для командной строки (если вы по какой-то причине не работаете без графического интерфейса).
Просто используйте один из инструментов на основе графического интерфейса, которые поддерживают управление индексами, например:
git gui <- использует оконный фреймворк Tk - стиль, аналогичный gitkgit cola <- более современный графический интерфейсОни позволяют перемещать файлы в индекс и выходить из него одним щелчком мыши. Они даже поддерживают выбор и перемещение частей файла (отдельные изменения) в индекс и из индекса.
Как насчет другой точки зрения: если вы запутались, используя одну из предложенных, довольно загадочных команд:
git rm --cached [file]git reset HEAD <file>... у вас есть реальная возможность потерять данные или, по крайней мере, затруднить их поиск. Если вам действительно не нужно делать это с очень высокой частотой, использование инструмента с графическим интерфейсом будет более безопасным .
Основываясь на комментариях и голосах, я понял, что многие люди используют индекс все время. Я не. Вот как:
git commit -agit commit (list of files)git commit -aзатем внесите изменения черезgit guigit difftool --dir-diff --tool=meldgit commit -a. Когда я отвечал на этот вопрос, это было потому, что я сделал (экзотический) « обратный выбор вишни », который помещает файлы в индекс для вас, но я хотел отредактировать файл перед фиксацией. Я удалил файл из индекса, пока редактировал его, чтобы diff работал так, как я привык.
rmсразу, но я сначала подумал, что переключение ветвей не приведет к уничтожению игнорируемой папки. но ... я использую инструмент github, основанный на графическом интерфейсе, который мне подходит, и поддерживаю управление индексами, за исключением того, что оно не поддерживает это. и что, я должен использовать 2 графических интерфейса для узкого использования? все еще не могу согласиться с ответом.