Временно удалить файлы из git


450

Я установил локальный мерзавец на моей машине. Когда я инициализировал git, я добавил предварительно скомпилированные библиотеки и двоичные файлы. Однако сейчас, во время разработки, я не хочу периодически проверять эти файлы. Я не хочу удалять эти файлы из репо. Есть ли способ не отслеживать эти файлы, пока я не закончу свою разработку. (Я думаю, что не могу использовать .gitignore, так как он работает только для тех файлов, которые не находятся в git. Я хочу временно отключить отслеживание файлов.)



Ответы:


724

git update-index должен делать то, что вы хотите

Это скажет git, что вы хотите начать игнорировать изменения в файле
git update-index --assume-unchanged path/to/file

Когда вы хотите начать отслеживать снова
git update-index --no-assume-unchanged path/to/file

Github Документация: обновление-индекс


3
Наконец, команда, которая на самом деле работает для моего случайно зафиксированного файла разработчика, спасибо :)
Ричард де Вит

15
Почему бы не git rm -r --cached <file>?
Эсан

23
@Ehsan, по-видимому git rm --cached, приведет к удалению локальных копий на других машинах, на которых проверяется та же ветвь, при их следующем извлечении. Смотрите arlocarreon.com/blog/git/… и особенно обсуждение ниже.
Мит

3
У меня не работает, когда я делаю изменения в файле, он все еще добавляется во включенные изменения. Я мог бы исключить, но в какой-то момент он, вероятно, будет добавлен случайно.
MrFox

8
Предположим, без изменений не было предназначено для этой цели. Может быть, хотите прочитать эту ветку
Appy

265

вы можете сохранить ваши файлы без изменений после

git rm -r --cached <file>

добавьте свои файлы с

git add -u

их подталкивать или делать что хочешь.


19
Это действительно правильный ответ, согласно: git-scm.com/book/en/v2/…
Эхсан

git rm --cached .DS_Store затем он печатает rm '../.DS_Store'и локальный файл удаляется ??! ( git version 2.6.4 (Apple Git-63))
Вейши Цзэн

Получил ответ здесь stackoverflow.com/questions/6919121/…
Weishi Zeng

4
Это не правильный ответ, потому что это удалит файл в источнике. ОП хочет игнорировать локальные изменения этого файла, а не вообще удалять его отслеживание
cjsimon

2
ВНИМАНИЕ: он также удалит файлы, которые вы хотите удалить. Решение состоит в том, чтобы скопировать все файлы куда-нибудь и скопировать их обратно после фиксации.
Псад

111
git rm --cached

Тем не менее, вы не должны в первую очередь создавать скомпилированные двоичные файлы и внешние зависимости. Используйте такой инструмент, как Bundler, вместо этого.


2
Не забывайте опцию -r (рекурсивную) для каталогов: git rm -r --cached
Анатолий Шуба


7

Git-book упоминает об этом в разделе 2.4: «Отмена вещей». По сути, вам нужно сбросить состояние индекса для некоторых файлов обратно в состояние HEAD, то есть в состояние последней проверки (или подтверждения). Это отменяет размещение файла в текущем индексе. Команда для этой задачи: git reset[1]

Итак, команда, которую вы должны выполнить:

git reset HEAD /path/to/file

Более новые версии git (я полагаю начиная с 1.6 или около того) дают эту команду (и многие другие) в качестве подсказки при выполнении git status. Эти версии очень удобны для пользователя. Персональный совет: если вы используете только несколько файлов, используйте git add -i. Это запустит интерактивный инструмент постановки, который делает вещь особенно легкой. Кроме того, я настоятельно рекомендую прочитать книгу, так как она очень четко описывает использование git в практических ситуациях.

[1] http://www.git-scm.com/book


Я согласен, что git reset [file]это самый простой способ удаления файлов.
Spectral

18
удаление и удаление - разные вещи
Хайме Сангкап

6

Не ответ на оригинальный вопрос. Но это может кому-то помочь.

Чтобы увидеть внесенные вами изменения ( узнать, какие файлы помечены как --assume-неизмененные )

git ls-files -v

Полученный список файлов будет иметь префикс с одним символом (например, H или h). Если это строчная буква (то есть h), то файл был помечен --assume-неизменным


5

Я предполагаю, что вы спрашиваете, как удалить ВСЕ файлы в папке сборки или в папке bin, а не выбирать каждый файл отдельно.

Вы можете использовать эту команду:

git rm -r -f /build\*

Убедитесь, что вы находитесь в родительском каталоге каталога сборки.
Эта команда рекурсивно «удалит» все файлы, которые находятся в папках bin / или build /. Под словом «удалить» я подразумеваю, что git сделает вид, что эти файлы «удалены», и эти файлы не будут отслеживаться. Git действительно отмечает, что эти файлы находятся в режиме удаления.

Убедитесь, что ваш .gitignore готов к предстоящим коммитам.
Документация: git rm


1

git reset [файл]

Получить файл обратно из рабочей области в рабочий каталог

Я часто забываю добавлять свои модули узлов в файл .gitignore, это решает эту проблему.



1

Чтобы удалить все файлы Untrack. Попробуйте эту команду терминала

 git clean -fdx

Это удалит файлы с диска, а не из истории мерзавцев.
Леонардо

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.