Ответ 1
Чтобы удалить ненужные файлы/каталоги, выполните следующие действия:
git clean -fdx
-f - force
-d - каталоги тоже
-x - удалить игнорированные файлы (не используйте это, если вы не хотите удалять игнорируемые файлы)
Я работаю над веткой, скажу "экспериментальная" ветвь, которую я отделяю от моей ведущей ветки. Затем я генерирую пользовательскую модель в экспериментальной ветки, но пока не добавляю ее в индекс.
Что мне нужно сделать, если я хочу отменить все изменения файлов, недавно добавленных в мою экспериментальную ветку? Неотслеживаемые файлы перечислены ниже:
$ git status
On branch new_chick
Untracked files:
(use "git add <file>..." to include in what will be committed)
.project
app/models/user.rb
db/migrate/
test/fixtures/users.yml
test/unit/user_test.rb
Я попытался запустить "git reset --hard" в надежде отменить все эти изменения, но все файлы, указанные выше, все еще отображаются.
Кто-нибудь прольет мне свет?
Чтобы удалить ненужные файлы/каталоги, выполните следующие действия:
git clean -fdx
-f - force
-d - каталоги тоже
-x - удалить игнорированные файлы (не используйте это, если вы не хотите удалять игнорируемые файлы)
Это незатребованные файлы. Это означает, что git не отслеживает их. Он перечисляет их только потому, что они не находятся в файле git ignore. Поскольку они не отслеживаются git, git reset
не будут касаться их.
Если вы хотите сбить все необработанные файлы, самый простой способ - git clean -f
(вместо этого использовать git clean -n
, если вы хотите увидеть, что он уничтожит, даже не удалив ничего). В противном случае вы можете просто удалить файлы, которые вам не нужны вручную.
Пользовательский интерактивный подход:
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 или - сухим, чтобы просто проверить, что он будет делать.
Команда для вашего спасения - git clean
.
Для удаления неотслеживаемых файлов:
git clean -f
Для удаления неотслеживаемых каталогов также используйте:
git clean -f -d
Для предотвращения остановки сердца используйте
git clean -n -f -d
Ну, у меня была похожая проблема. Я взял последний, но в локальном хранилище произошли некоторые изменения, из-за которых не произошло слияние с конкретным файлом. Файл не был отслежен, и я не хотел их так, что я сделал -
$ git checkout filepath/filename
filepath - место, откуда я делал git bash. тогда, когда я взял последний изменения были доступны
Вы также можете вернуться к предыдущему состоянию локального репо другим способом:
git add
.git reset --hard
. Хотя git clean
работает хорошо, я все же считаю полезным использовать мой собственный скрипт для очистки git-репо, но у него есть некоторые преимущества.
Это показывает список файлов, которые нужно очистить, а затем в интерактивном режиме предлагает очистить или нет. Это почти всегда то, что я хочу, так как интерактивный запрос на файл становится утомительным.
Это также позволяет ручную фильтрацию списка, что удобно, когда есть типы файлов, которые вы не хотите чистить (и у вас есть причина не фиксировать).
git_clean.sh
#!/bin/bash
readarray -t -d '' FILES < <(
git ls-files -z --other --directory |
grep --null-data --null -v '.bin$\|Cargo.lock$'
)
if [ "$FILES" = "" ]; then
echo "Nothing to clean!"
exit 0
fi
echo "Dirty files:"
printf ' %s\n' "${FILES[@]}"
DO_REMOVE=0
while true; do
echo ""
read -p "Remove ${#FILES[@]} files? [y/n]: " choice
case "$choice" in
y|Y )
DO_REMOVE=1
break ;;
n|N )
echo "Exiting!"
break ;;
* ) echo "Invalid input, expected [Y/y/N/n]"
continue ;;
esac
done
if [ "$DO_REMOVE" -eq 1 ];then
echo "Removing!"
for f in "${FILES[@]}"; do
rm -rfv "$f"
done
fi