Git Stash восстанавливает игнорируемые файлы
Я совершил в прошлом некоторые неправильные файлы для мерзавца. После этого я исключил и проигнорировал эти файлы:
git rm --cached -r config.php
git reset config.php
echo "config.php" >> .gitignore
git update-index --assume-unchanged config.php
Теперь git commit отлично работает. Изменения в config.php не зафиксированы.
Но: если я прятал рабочий каталог, например, для переключения ветки, то config.php восстанавливается из локальных репозиториев.
Как я могу использовать git stash
без изменения игнорируемых (и из индекса исключенных) файлов?
2 ответа
Я нашел решение по адресу https://help.github.com/articles/remove-sensitive-data:
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch config.php' \
--prune-empty --tag-name-filter cat -- --all
Может быть reset
необходимо исключить его из будущих коммитов:
git reset config.php
После удаления всей информации из config.php из локальных веток я принудительно обновил удаленные репозитории:
git push origin master --force
Теперь мой тайник работает нормально.
Отредактированный ответ
Вы сделали git rm --cached -r config.php
, но не совершил это изменение.
Затем вы сделали git reset config.php
, который очистил эффект git rm
Вы сделали ранее. Итак, вы сейчас вернулись туда, откуда начали.
Затем вы добавили config.php
в .gitignore
, Это не будет иметь никакого влияния, так как config.php
все еще отслеживается прямо сейчас.
Наконец, вы сделали git update-index --assume-unchanged config.php
из-за чего любые изменения не видны локально, если вы делаете git status
/ git diff
, Эти шаги создают иллюзию git rm
а также .gitignore
работал хорошо, когда они этого не сделали.
Вместо этого сделайте это (-r
флаг был излишним, это не каталог)
git rm --cached config.php
echo config.php >> .gitignore && git add .gitignore
git commit -m "removing config.php"
Оригинальный ответ
Но: если я прятал рабочий каталог, например, для переключения ветки, то config.php восстанавливается из локальных репозиториев.
Ну, вы только что удалили config.php из текущей ветки (давайте назовем это master
), но другая ветка other
все еще отслеживает это. Вот почему вы это видите. Это не имеет ничего общего с git stash
,
Вы, вероятно, должны объединить ветку master
в other
внести коммит в ветку other
,