Git reset --hard HEAD оставляет неизведанные файлы позади
Когда я запускаю git reset --hard HEAD
, он должен reset донести к первозданной версии того, что вы потянули, как я понимаю. К сожалению, он оставляет файлы лежащими, так как git status
показывает большой список файлов без следа.
Как вы скажете git "Просто верните его ТОЧНО, что было в последнем притяжении, ничего больше, не меньше"?
Ответы
Ответ 1
Вы должны использовать git clean -f -d
чтобы избавиться от неотслеживаемых файлов и каталогов в вашей рабочей копии.
Если вам нужно сбросить весь репозиторий на master, включая все подмодули git, запустите этот скрипт:
git reset --hard HEAD
git clean -f -d
git checkout master
git fetch origin master
git reset --hard origin/master
git pull
git submodule update
git submodule update --init --recursive
git submodule foreach git reset --hard HEAD
git submodule foreach git clean -f -d
git submodule foreach git submodule update --init --recursive
git submodule foreach git fetch
git submodule foreach git pull
git status
Ответ 2
Если у вас есть файлы, которые вы все еще хотите сохранить:
git clean -di
сделает интерактивную очистку, которая позволит вам только удалить файлы/директории, которые вам больше не нужны.
Ответ 3
git reset --hard && git clean -dfx
или zsh предоставляет псевдоним 'gpristine':
alias gpristine='git reset --hard && git clean -dfx'
Что действительно удобно.
Если вы работаете с разветвленным репо, убедитесь, что вы выбрали и сбросили из правильного репо/ветки, например:
git fetch upstream && git reset --hard upstream/master && git clean -df
Ответ 4
Пользовательский интерактивный подход:
git clean -i -fd
Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/amazon/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/s3/ [y/N]? y
-i для интерактивных
-f для силы
-d для каталога
-x для игнорируемых файлов (добавьте, если требуется)
Примечание: Добавить -n или - сухим, чтобы просто проверить, что он будет делать.
Ответ 5
Вы можете использовать git stash
. Вы должны указать --include-untracked
, в противном случае вы получите исходную проблему.
git stash --include-untracked
Тогда просто брось последнюю запись в stash
git stash drop
Ответ 6
Команда, которую вы ищете, git clean
Ответ 7
В какой-то момент вы могли бы сделать мягкий reset, вы можете решить эту проблему, выполнив
git add .
git reset --hard HEAD~100
git pull