Как очистить кэш git
Как удалить файл из индекса (= область размещения = кэш), не удаляя его из файловой системы?
Вы имеете в виду «сброс к тому, что было раньше» или «удалить, потому что я больше не хочу этот файл»? В моем случае это то же самое, потому что файл не существовал раньше .Если вы пропустите --cached опцию, она также будет удалена из рабочего дерева. git rm немного безопаснее, чем git reset , потому что вы будете предупреждены, если промежуточный контент не соответствует ни концу ветви, ни файлу на диске. (Если этого не произойдет, вы должны добавить --force .)
Это также прекрасно работает, если, например, вы случайно зарегистрировали некоторые промежуточные сборки или локальные файлы конфигурации, которые не попали в ваш .gitignore; используйте, git rm --cached чтобы удалить их из репозитория, добавить соответствующие файлы или каталоги в .gitignore, подготовить и зафиксировать как обычно. Они исчезнут из репо, но останутся нетронутыми в вашем локальном дереве, и вы случайно не зарегистрируете их снова. Это также удаляет файл из репо (удаленного) после фиксации и нажатия. Это не удаляет его из индекса, но помечает его как удаленный в индексе. Этот ответ, скорее всего, неверен, поскольку он удаляет файл из репозитория (как уже упоминалось @ powder366), что не является ожидаемым результатом. Это решение не сработало для меня. Он пометил указанный файл как удаленный, а затем удаляет его из локального репо.Это должно отменить удаление файла <file> (без удаления или иного изменения файла):
Это удаляет последнее изменение для конкретного файла, но сохраняет его в репозитории (удаленно) после фиксации и отправки. Это ответ, который я искал. Обратите внимание, что вам не нужно указывать HEAD . Хороший вопрос @MichaelDorst. Я обновил ответ, чтобы пропустить HEAD !для удаления конкретного файла из индекса.
для удаления всех проиндексированных файлов.
В зависимости от вашего рабочего процесса, это может быть тот тип вещей, которые вам нужны достаточно редко, так что нет смысла пытаться найти решение для командной строки (если вы по какой-то причине не работаете без графического интерфейса).
Просто используйте один из инструментов на основе графического интерфейса, которые поддерживают управление индексами, например:
- git gui <- использует оконный фреймворк Tk - стиль, аналогичный gitk
- git cola <- более современный графический интерфейс
Они позволяют перемещать файлы в индекс и выходить из него одним щелчком мыши. Они даже поддерживают выбор и перемещение частей файла (отдельные изменения) в индекс и из индекса.
Как насчет другой точки зрения: если вы запутались, используя одну из предложенных, довольно загадочных команд:
- git rm --cached [file]
- git reset HEAD <file>
. у вас есть реальная возможность потерять данные или, по крайней мере, затруднить их поиск. Если вам действительно не нужно делать это с очень высокой частотой, использование инструмента с графическим интерфейсом будет более безопасным .
Работа без индекса
Основываясь на комментариях и голосах, я понял, что многие люди используют индекс все время. Я не. Вот как:
Я работаю с несколькими репозиториями, но в последнее время я просто работал в нашем внутреннем, и все было здорово.
сегодня мне пришлось совершить и вставить код в другой, но у меня возникли некоторые проблемы.
Я ничего не могу сделать, чтобы снова ввести пароль.
как я могу сбросить учетные данные в моей системе, чтобы Git попросил у меня пароль этого репозитория?
для того чтобы сбросить пароль
во избежание кэширования учетных данных.
кажется, ничего не работает; у кого-нибудь есть идея получше?
кэш учетных данных Git запускает процесс демона, который кэширует ваши учетные данные в памяти и передает их по требованию. Таким образом, убийство вашего процесса git-credential-cache-daemon выбрасывает все это и приводит к повторному запросу пароля, если вы продолжаете использовать его в качестве кэша.вспомогательный вариант.
вы также можете отключить использование кэша учетных данных Git с помощью git config --global --unset credential.helper . Затем сбросьте это, и вы продолжите иметь кэшированные учетные данные, доступные для других репозитории (если есть). Вам также может потребоваться сделать git config --system --unset credential.helper если это было задано в файле конфигурации системы (например, Git для Windows 2).
В Windows вам может быть лучше использовать менеджер помощник ( git config --global credential.helper manager ). Это хранит ваши учетные данные в хранилище учетных данных Windows, который имеет интерфейс панели управления, где можно удалить или изменить сохраненные учетные данные. В этом магазине ваши данные защищены вашим логином Windows и могут сохраняться в течение нескольких проведение сессий. The менеджер помощник, включенный в Git для Windows 2.x заменил предыдущее wincred помощник, который был добавлен в Git для Windows 1.8.1.1. Подобный помощник называется магазине приложений также доступен онлайн и использовался с GitExtensions, поскольку он предлагает более управляемый интерфейс GUI. The менеджер helper предлагает тот же интерфейс GUI, что и магазине приложений.
выписка из руководство по Windows подробно Панель хранилища учетных данных Windows:
откройте учетные записи пользователей, щелкнув изображение кнопки Пуск кнопки Пуск, щелкнув Панель управления, щелкнув учетные записи пользователей и безопасность семьи (или щелкнув учетные записи пользователей, если вы подключены к сетевому домену), а затем щелкнув учетные записи пользователей. В левой области щелкните Управление учетными данными.
Если эта проблема возникает на компьютере под управлением Windows, выполните следующие действия.
- перейти к менеджеру учетных данных
- перейти к учетным данным Windows
- удалить записи в разделе Общие учетные данные
- повторите попытку подключения. На этот раз он должен запросить у вас правильное имя пользователя и пароль.
и затем вам будет предложено снова ввести свои учетные данные.
предупреждение
использование этого помощника сохранит ваши пароли незашифрованными на диске
я столкнулся с той же проблемой, что и ОП. Он принимал мои старые учетные данные Git, хранящиеся где-то в системе, и я хотел использовать Git с моими новыми учетными данными, поэтому я запустил команду
всякий раз, когда я выполнял git push это было мое старое имя пользователя, которое я установил давно, и я хотел использовать новую учетную запись GitHub для внесения изменений. Позже я обнаружил, что мои старые учетные данные учетной записи GitHub хранятся под Панель Управления → Учетные Записи Пользователей → Диспетчер Учетных Данных → Управление Учетными Данными Windows.
Я просто удалил эти учетные данные и когда я выполнил git push он попросил у меня мои учетные данные GitHub, и это сработало как шарм.
попробуйте использовать следующую команду.
здесь вы можете получить различные опции для управления учетными данными (проверьте экран ниже).
или вы даже можете напрямую попробовать этот команду:
это снова начнет запрашивать пароли для каждого запроса взаимодействия с сервером.
в моем случае Git использует Windows для хранения учетных данных.
все, что вам нужно сделать, это удалить сохраненные учетные данные, хранящиеся в вашей учетной записи Windows:
Я нашел то, что работал для меня. Когда я писал свой комментарий к OP, мне не удалось проверить файл конфигурации системы:
линии. Я снимаю его с
и теперь учетные данные будут забыты.
покажет credential.helper = manager (это на машине windows)
чтобы отключить это кэшированное имя пользователя / пароль для текущей локальной папки git, просто введите
таким образом, git будет запрашивать пароль каждый раз, игнорируя то, что сохраняется внутри "менеджер".
необходимо войти в систему с соответствующим github username и password
чтобы очистить имя пользователя и пароль в windows
Панель Управления\Учетные Записи Пользователей\Диспетчер Учетных Данных
редактировать учетные данные windows
удалите существующего пользователя и теперь перейдите в командную строку напишите команду push, она показывает всплывающее окно github для ввода username / email и password .
теперь мы можем нажать кода после переключение пользователей.
- cmdkey /list выводит список всех сохраненных учетных данных.
- cmdkey /delete:Target удаляет учетные данные с именем" Target".
(*под "wincred" я имею в виду git config --global credential.helper wincred )
удалите эту строку из вашей .файл gitconfig, расположенный в текущей папке пользователя Windows:
это сработало для меня, и теперь, когда я нажимаю на пульт, он снова запрашивает мой пароль.
Вы можете удалить строку credential.helper=!github --credentials из файла C:\Program Files\Git\mingw64\etc\gitconfig для удаления учетных данных для git
в случае диспетчер учетных данных Git для Windows используется (что обычно делают текущие версии):
Это добавлена середина 2016. Чтобы проверить, используется ли диспетчер учетных данных:
в моем случае я не смог найти учетные данные, сохраненные в Диспетчере учетных данных Windows (Windows 7).
я смог сбросить свои учетные данные, выполнив
честно говоря, это был град Марии, чтобы увидеть, если это уничтожит мои учетные данные, и это действительно сработало.
Я хотел бы поместить проект Git на GitHub, но он содержит определенные файлы с конфиденциальными данными (имена пользователей и пароли, такие как /config/deploy.rb for capistrano).
Я знаю, что могу добавить эти имена файлов в .gitignore, но это не удалит их историю в Git.
Я также не хочу начинать все сначала, удалив /.каталог git.
есть ли способ удалить все следы конкретного файла в вашем Git история?
для всех практических целей первый вещь, о которой вы должны беспокоиться, это ИЗМЕНЕНИЕ ПАРОЛЕЙ! из вашего вопроса неясно, является ли ваш репозиторий git полностью локальным или у вас есть удаленный репозиторий в другом месте; если он удален и не защищен от других, у вас есть проблема. Если кто-то клонировал этот репозиторий до того, как вы это исправите, у них будет копия ваших паролей на своем локальном компьютере, и вы не сможете заставить их чтобы обновить до вашей "фиксированной" версии, когда она ушла из истории. Единственная безопасная вещь, которую вы можете сделать, это изменить свой пароль на что-то еще везде, где вы его использовали.
Примечание для пользователей Windows: используйте двойные кавычки (") вместо синглов в этой команде
в будущем, если вы случайно совершить некоторые изменения с конфиденциальной информацией, но вы заметите до нажатие на удаленный репозиторий, есть несколько более простых исправлений. Если вы последний коммит, чтобы добавить конфиденциальную информацию, вы можете просто удалить конфиденциальную информацию, а затем запустить:
это изменит предыдущую фиксацию с любыми новыми изменениями, которые вы сделали, включая все удаления файлов, выполненные с помощью git rm . Если изменения находятся дальше в истории, но все еще не перенесены в удаленный репозиторий, вы можете сделать интерактивную ребазу:
это открывает редактор с фиксациями, которые вы сделали с момента вашего последнего общего предка с удаленным репозиторием. Измените " pick "на" edit " в любых строках, представляющих фиксацию с конфиденциальной информацией, и сохраните и закройте. Git пройдет через изменения и оставит вас в месте, где вы можете:
для каждого изменения с конфиденциальная информация. В конце концов, вы вернетесь на свою ветку, и вы можете безопасно нажать новые изменения.
изменение паролей-хорошая идея, но для процесса удаления пароля из истории вашего РЕПО я рекомендую BFG Repo-Cleaner, более быстрая и простая альтернатива git-filter-branch явно предназначен для удаления частных данных из репозиториев Git.
создать private.txt файл с перечислением паролей и т. д., которые вы хотите удалить (по одной записи на строку) , а затем выполните следующую команду:
все файлы под пороговым размером (1 МБ по умолчанию) в вашем история РЕПО будет отсканирована, и любая соответствующая строка (это не в вашем последний commit) будет заменен строкой " * * * REMOVED***". Затем вы можете использовать git gc чтобы очистить мертвые данные:
BFG обычно 10-50x быстрее, чем работает git-filter-branch и варианты упрощены и портняжничаны вокруг этих 2 общих использовани-случаев:
- удаление Сумасшедшие Большие Файлы
- удаление пароли, Верительные грамоты и другие личные данные
полное раскрытие информации: я автор РЕПО-очистителя BFG.
рекомендую этот скрипт Дэвид Андерхилл, работал как шарм для меня.
Он добавляет эти команды в дополнение к фильтр-ветви natacado, чтобы очистить беспорядок, который он оставляет позади:
полный сценарий (все заслуги Дэвида Андерхилла)
последние две команды могут работать лучше, если изменить их на следующие:
Если вы уже нажали на GitHub, данные скомпрометированы, даже если вы заставите оттолкнуть его через секунду потому что:
GitHub продолжает болтаться фиксации в течение длительного времени.
сотрудники GitHub имеют право удалять такие болтающиеся коммиты, если вы обратитесь к ним, однако, что вы должны сделать:Как удалить болтающуюся фиксацию из GitHub?
висячие коммиты можно увидеть либо через:
можно получить отсутствующие SHAs либо по:
Я не мог найти, если они царапают фактический фиксации diff, но это технически возможно.
поэтому мой рекомендуемый курс действий:
изменить верительные грамоты
если этого недостаточно (например, голые фото):
- удалить репозиторий
- обратитесь в службу поддержки
чтобы быть ясным: принятый ответ правильный. Попробуй сначала. Однако это может быть излишне сложным для некоторых случаев использования, особенно если вы сталкиваетесь с неприятными ошибками, такими как "fatal: bad revision-prune-empty", или действительно не заботитесь об истории вашего РЕПО.
Это, конечно, удалит все ветви истории фиксации и проблемы как из вашего репозитория github, так и из вашего локального репозитория git. Если это неприемлемо, вам придется использовать альтернативный вариант подход.
назовите это ядерной опцией.
вот мое решение в windows
git filter-branch --tree-filter" rm-f 'filedir/filename' " HEAD
git push -- force
убедитесь, что путь правильный иначе не получится!--1-->
надеюсь, это поможет
использовать фильтр-филиала:
можно использовать git forget-blob .
использование довольно просто git forget-blob file-to-forget . Вы можете получить больше информации здесь
он исчезнет из всех коммитов в вашей истории, reflog, теги и так далее
кредиты вкладчикам из Stack Overflow, которые позволили мне собрать это вместе
мне пришлось сделать это несколько раз на сегодняшний день. Обратите внимание, что это работает только на 1 файл за раз.
получить список всех коммитов, которые изменили файл. Тот, кто внизу будет первым совершать:
git log --pretty=oneline --branches -- pathToFile
чтобы удалить файл из истории, используйте первую фиксацию sha1 и путь к файлу из предыдущей команды и заполните их этой командой:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch <path-to-file>' -- <sha1-where-the-file-was-first-added>..
Итак, это выглядит примерно так:
удалить кэш для отслеживаемого файла из git и добавить этот файл в .gitignore список
When working with Git, you may want to add some new lines to your gitignore files.
However, when listing the files to be committed in your staging area, you realize that some of the ignored files are still showing up.
In this case, you may need to clear your Git cache.
In this tutorial, we are going to provide a comprehensive guide on how to clear your Git cache.
We are also going to explain in details how to actively remove files you wanted to ignore in the first place.
Table of Contents
Clear Git Cache using rm
Usually, you want to clear your Git cache because you added new entries in your gitignore files and you want them to be taken into account.
You can choose to remove one file or to remove an entire working directory.
Concrete example
Note : do not forget the cached option or your file will be deleted from the filesystem.
In this case, you want your file to go from the staging area back to the working directory (essentially the untracked part of Git).
To clear the cache, you use the git rm command.
Clear Entire Git Cache
In some cases, you may want to clear the cache of your entire Git staging area.
This is particularly useful when you added multiple files that you want now to be ignored via your .gitignore file.
When all files are removed from the index, you can add the regular files back (the one you did not want to ignore)
Concrete Example
For this example, the .gitignore file is set to ignore files ending in .conf.
In the staging area, we have two files ending in .conf and three regular files ending in .js.
Now some of the files may be marked as deleted and some others are back to the working directory.
Now, you want to add them back to the staging area while taking into account the content of your .gitignore file.
The configuration files are not in the staging area anymore.
You can now commit and push them to your repository.
Note : do not forget to set your upstream branch when pushing your changes.
Conclusion
In this tutorial, you learnt how you can clear your Git cache easily and how it can help when you updated your .gitignore file.
If you are curious about Git or software engineering, we have a complete section dedicated to it on the website.
Читайте также: