Удаленная ветка git checkout показывает посторонние файлы?

основная ветвь имеет эти файлы и папки (упрощенно):

C:\Local\TickZoom\Project>ls
file.txt         name.txt      public

общедоступная ветвь отслеживает репозиторий поставщика и была объединена с поддеревом как общая папка в основной ветке выше. public имеет только три папки (упрощенно):

C:\Local\TickZoom\Project>ls
platform  providers  www

При переключении с паблика на мастер ведет себя корректно.

Однако при переключении с master на public происходит странная вещь. В нем объединены все файлы и папки обоих:

C:\Local\TickZoom\Project>git checkout public

C:\Local\TickZoom\Project>ls
file.txt  name.txt   public
platform  providers  www

Однако проверка статуса git говорит, что ничего не изменилось.

Я обнаружил, что 'git reset --hard' исправляет публичные ошибки.

ПОДСКАЗКА: кажется, что это происходит только после создания нового коммита на master. Выполняет ли git какое-то автоматическое слияние?

После «git reset --hard» проверка на мастер и обратно в публичный режим работает нормально, даже если неоднократно.

Сначала я думал, что это было исправлено, но в следующий раз, когда я внес изменения, это произошло снова. Позвольте мне попробовать это еще раз, чтобы убедиться...

Теперь не могу воспроизвести. Но это случилось дважды.

Еще один CLUE заключается в том, что в первый раз, когда я сделал git reset --hard, он жаловался на то, что файлы заблокированы процессами.

После того, как программы-нарушители были закрыты, команда git reset --hard завершилась успешно, и проверка прошла между двумя ветвями.

Так не запутается ли проверка из-за того, что файлы заблокированы и «тихо» не работают? Было бы лучше, если бы проблема была в том, чтобы потерпеть неудачу так же, как git reset --hard, чем просто сообщить об успехе и иметь беспорядочное рабочее пространство.

Любая другая мудрость или параметры, которые можно установить в git checkout, чтобы избежать этого, будут оценены.

Уэйн


person Wayne    schedule 18.11.2009    source источник
comment
Хорошо, теперь нашел проблему. Как исправить? Проблема в том, что в подпапках есть игнорируемые файлы. git правильно выполняет проверку, но оставляет все игнорируемые файлы, и если есть несколько каталогов, он оставляет все каталоги, чтобы добраться до них. Я попробовал git clean -f, и он все еще оставляет файлы. Как очистить неотслеживаемые файлы при переключении между ветками?   -  person Wayne    schedule 18.11.2009


Ответы (2)


Вы можете очистить все неотслеживаемые файлы, используя:

git clean -dfx

Прежде чем запускать эту команду, убедитесь, что на самом деле нет никаких неотслеживаемых файлов, которые вы хотите сохранить!

person Dan Moulding    schedule 18.11.2009
comment
Обратите внимание: я обнаружил, что X в верхнем регистре очищает только игнорируемые файлы и оставляет все неотслеживаемые файлы в покое — это намного безопаснее. Нижний регистр x удаляет все игнорируемые и неотслеживаемые файлы - как вы сказали - опасные. Так что ваш восклицательный знак был заслужен! - person Wayne; 18.11.2009
comment
Это работает, но если у вас есть элементы окружения, такие как bower_components, node_modules или platforms, они тоже будут удалены. Вы фактически получаете именно то, что произойдет, если вы клонируете git с нуля - person Deminetix; 26.08.2015

используйте это, чтобы решить

git очистить -f -d -X

Это очищает только файлы, игнорируемые вашим .gitignore, и все пустые каталоги, которые их содержат.

Теперь я делаю это в сценарии перед извлечением веток из совершенно разных репозиториев.

Это не проблема при переключении ветвей между одним и тем же программным обеспечением.

Уэйн

person Wayne    schedule 18.11.2009
comment
В комментарии, который вы оставили, чтобы уточнить свой вопрос, вы спросили, как очистить неотслеживаемые файлы при переключении между ветками? Параметр X в верхнем регистре не очищает неотслеживаемые файлы, он очищает только игнорируемые файлы. Параметр x в нижнем регистре очищает неотслеживаемые файлы (в том числе игнорируемые). Вот почему мой ответ предложил строчную букву x. :) - person Dan Moulding; 21.11.2009