как удалить неотслеживаемые файлы в Git? - PullRequest
103 голосов
/ 20 ноября 2011

Я работаю над веткой, скажем, "экспериментальной" веткой, которую я разветвляю из своей основной ветки. Затем я генерирую пользовательскую модель в экспериментальной ветке, но пока не добавляю их в индекс.

Что мне делать, если я хочу отменить все изменения файлов, недавно добавленных в мою экспериментальную ветку? Файлы без отслеживания перечислены ниже:

$ 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" в надежде отменить все эти изменения, но все файлы выше все еще показывают.

Кто-нибудь, пожалуйста, пролите немного света на меня?

Ответы [ 8 ]

206 голосов
/ 20 ноября 2011

Чтобы удалить неотслеживаемые файлы / каталоги, выполните:

git clean -fdx

-f - сила

-d - каталоги тоже

-x - также удалить игнорируемые файлы (не используйте это, если вы не хотите удалять игнорируемые файлы)

17 голосов
/ 14 июня 2017

Интерактивный подход пользователя:

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 или - пробный прогон , чтобы просто проверить, что он будет делать.

15 голосов
/ 20 ноября 2011

Это неотслеживаемые файлы. Это означает, что Git не отслеживает их. Это только перечисление их, потому что они не находятся в файле git ignore. Поскольку git не отслеживает их, git reset не будет их трогать.

Если вы хотите уничтожить все неотслеживаемые файлы, самый простой способ - git clean -f (вместо этого используйте git clean -n, если хотите увидеть, что он будет уничтожать, не удаляя ничего). В противном случае вы можете просто удалить ненужные файлы вручную.

1 голос
/ 12 июня 2018

Вы также можете вернуться к предыдущему состоянию локального репо другим способом:

  1. Добавить неотслеживаемые файлы в область подготовки с помощью git add.
  2. возврат в предыдущее состояние локального репо с git reset --hard.
1 голос
/ 02 декабря 2017

Команда для вашего спасения - git clean.

0 голосов
/ 10 января 2019

Хотя 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
0 голосов
/ 23 февраля 2018

Ну, у меня была похожая проблема.Я взял последний, но в локальном хранилище произошли некоторые изменения, из-за которых не произошло слияние с конкретным файлом.Файл не был отслежен, и я не хотел их, поэтому я сделал -

$ git checkout filepath / filename

filepath - Место, откуда я делал git bash.тогда, когда я взял последнюю версию, изменения были доступны

0 голосов
/ 30 октября 2017

Для удаления неотслеживаемых файлов:

git clean -f

Для удаления неотслеживаемых каталогов, также используйте:

git clean -f -d

Для предотвращения остановки сердца используйте

git clean -n -f -d

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...