Как удалить файл из "области сцены"? - PullRequest
0 голосов
/ 25 августа 2011

После того, как я сделал коммит, я хочу очистить область сцены.Вот что я сделал:

git add 1.txt    ----- stage the 1.txt file
git commit -m "commit 1.txt"  ----- commit the 1.txt file
git reset HEAD 1.txt   ----- I want to clean the stage area

Затем я проверяю область сцены с помощью этой команды:

git ls-files

Текст 1.txt по-прежнему отображается.

Почему?

Ответы [ 5 ]

5 голосов
/ 25 августа 2011

Фиксация изменений очистит область сцены, вам не нужно ничего делать после коммита.

В противном случае используйте git reset:

git add 1.txt    ----- stage the 1.txt file
git reset 1.txt    ----- remove 1.txt file from stage

Кроме того, используйте git status вместоgit ls-files.

4 голосов
/ 25 августа 2011

Краткий ответ:

Ваша подготовка чиста, по крайней мере, в случае HEAD, если не рабочий каталог тоже, после фиксации.

Длинный ответ:

Вы совершилифайл 1.txt.При фиксации индекс (постановка) и HEAD становятся одинаковыми.И когда вы делаете git reset HEAD 1.txt, это в основном noop, поскольку и index, и HEAD имеют одинаковую версию 1.txt.

И git ls-files будет отображать 1.txt, поскольку файл находится в вашем репо.

Не совсем уверен, что вы пытаетесь сделать.Но как только вы зафиксировали файл, вы можете отменить изменения, которые вы сделали с ним.В случае вновь добавленного файла, unstaging изменений аналогичен удалению вновь добавленного файла из индекса и, следовательно, unstaging его.Но это не то же самое для файла, уже находящегося в репо.

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

Но я думаю, что git rm --cached - это не то, что вы хотите сделать, а просто чистая постановка / индекс.После фиксации он все равно будет чистым (по крайней мере, в HEAD, если не в рабочем каталоге).

0 голосов
/ 25 августа 2011

Область постановки сбивает с толку многих [там, получил шрамы].

Одно из лучших объяснений есть в git wiki FAQ, почему git rm не является противоположностью git add здесь .

Я использую визуализацию стены раскадровки, где копии размещаются (инсценируются), и их необходимо активно удалять со стены как отдельное действие от любых настроек на вашем рабочем столе (рабочий каталог).

Зона подготовки также используется во время слияния, чтобы не загромождать вашу личную рабочую зону.

0 голосов
/ 25 августа 2011

Поскольку в git ls-files перечислены все файлы, отслеживаемые git.

Возможно, вам нужен статус git здесь.

0 голосов
/ 25 августа 2011

git ls-files показывает, что вы отслеживаете в настоящее время. Независимо от того, передали ли вы этот файл или нет.

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

«Промежуточная область» - это просто разница между тем, на что указывает HEAD в хранилище, и тем, на что указывает индекс. Это не физический файл, который вы очищаете.

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