Поэтому я добавил папку в мой файл .gitignore.
Как только я делаю, git status
это говорит мне
# On branch latest
nothing to commit (working directory clean)
Однако, когда я пытаюсь сменить ветку, я получаю следующее:
My-MacBook-Pro:webapp marcamillion$ git checkout develop
error: The following untracked working tree files would be overwritten by checkout:
public/system/images/9/thumb/red-stripe.jpg
public/system/images/9/original/red-stripe.jpg
public/system/images/8/thumb/red-stripe-red.jpg
public/system/images/8/original/red-stripe-red.jpg
public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg
public/system/images/7/thumb/red-stripe-dark.jpg
public/system/images/7/original/red-stripe-dark.jpg
public/system/images/7/original/DSC07833.JPG
public/system/images/6/thumb/red-stripe-bw.jpg
public/system/images/6/original/website-logo.png
public/system/images/6/original/red-stripe-bw.jpg
public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg
public/system/images/5/original/logocompv-colored-squares-100px.png
public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg
public/system/images/4/thumb/DSC_0001.JPG
public/system/images/4/original/logo.png
public/system/images/4/original/DSC_0001.JPG
public/system/images/4/original/2-up.jpg
public/system/images/3/thumb/logo2.gif
public/system/images/3/original/logo2.gif
public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg
public/system/images/3/original/11002000962.jpg
public/system/images/2/thumb/Profile Pic.jpg
public/system/images/2/original/Profile Pic.jpg
public/system/images/2/original/02 Login Screen.jpg
public/system/images/1/original/Argentina-2010-World-Cup.jpg
Please move or remove them before you can switch branches.
Aborting
Вот как выглядит мой файл .gitignore:
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*
Как мне заставить это работать, чтобы я мог переключать ветви, не удаляя эти файлы?
Если я внесу изменения, это повлияет на эти файлы? Другими словами, если бы я потом вернулся в эту ветку, все было бы идеально, как до моего последнего коммита?
Я не хочу терять эти файлы, я просто не хочу, чтобы они отслеживались.
Ответы:
Кажется, вы хотите, чтобы файлы игнорировались, но они уже были зафиксированы. .gitignore не влияет на файлы, которые уже находятся в репо, поэтому их необходимо удалить с помощью
git rm --cached
. Это--cached
предотвратит какое-либо влияние на вашу рабочую копию и будет помечено как удаленное при следующей фиксации. После удаления файлов из репозитория .gitignore предотвратит их повторное добавление.Но у вас есть другая проблема с вашим .gitignore, вы чрезмерно используете подстановочные знаки, и это приводит к тому, что он соответствует меньше, чем вы ожидаете. Вместо этого давайте изменим .gitignore и попробуем это.
источник
git rm --cached
это не будет иметь значения, эти файлы не существуют в текущей ветви. Для этой ошибки я думаю, что вместо этого пользователь должен следовать ответу @Greg Hewgill - «убрать их из рабочей копии, переключить ветви и переместить их назад».your files would be overwritten
с,fatal: pathspec 'test/node_modules' did not match any files
когда я делаюgit rm -r --cache test/node_modules
? Я не могу вытащить из-за перезаписанного сообщения и не могу удалить, потому что git не может их найти (они есть)ВНИМАНИЕ: он удалит неотслеживаемые файлы, поэтому это не лучший ответ на поставленный вопрос.
Я ударил это сообщение также. В моем случае я не хотел хранить файлы, так что это сработало для меня:
мерзавец 2.11 и новее
старый мерзавец
Если вы также хотите удалить файлы, игнорируемые git, выполните следующую команду.
ИМЕЙТЕ В ВИДУ!!! ЭТО НАИБОЛЕЕ ВЕРОЯТНО УНИЧТОЖАЕТ ВАШ ПРОЕКТ, ИСПОЛЬЗУЙТЕ ТОЛЬКО ЕСЛИ ВЫ ЗНАЕТЕ 100% ЧТО ВЫ ДЕЛАЕТЕ
мерзавец 2.11 и новее
старый мерзавец
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
означает, что игнорируемые файлы также удаляются, а также файлы, неизвестные git.-d
означает удалить неотслеживаемые каталоги в дополнение к неотслеживаемым файлам.-f
требуется, чтобы заставить его бежать.источник
git clean -dfxn
илиgit clean -dfx --dry-run
-x
Вариант мне больноПросто заставьте это:
git checkout -f another-branch
источник
error: pathspec 'mybranch' did not match any file(s) known to git.
Если вы работаете в OS X, это может быть связано с тем, что в имени файла есть определенные символы, изменяющие регистр. Попробуйте установить следующий параметр конфигурации:
источник
git rebase
так же. Спасибо.Git сообщает вам, что хочет создать файлы (именованные и
public/system/images/9/...
т. Д.), Но у вас уже есть файлы в этом каталоге, которые не отслеживаются Git. Возможно, кто-то еще добавил эти файлы в репозиторий Git, и вы впервые переключаетесь на эту ветку?Вероятно, есть причина, по которой эти файлы находятся в вашей
develop
ветке, а не в текущей. Возможно, вам придется спросить ваших сотрудников, почему это так.Вы не можете сделать это, не заставив файлы исчезнуть как-то. Вы можете переименовать
public
вmy_public
или что - то сейчас.Если вы передадите свои изменения, Git не потеряет их. Если вы не фиксируете свои изменения, то Git будет изо всех сил стараться не перезаписывать работу, которую вы сделали. Это то, о чем Git предупреждает вас в первую очередь здесь (когда вы пытались переключать ветки).
источник
Это сработало для меня.
источник
Для этой деликатной задачи есть команда (навсегда удалить неотслеживаемые файлы)
Тогда
git pull
сделаем.источник
Для тех, кому нужно что-то менее серьезное, чем ответ Скотта Шейфера ,
скорее всего сработает. Я настоятельно рекомендую бежать
первый. Эта команда выведет список файлов, которые Git удалит при запуске
git clean -f
, и может избавить вас от необходимости непреднамеренного удаления того, что вы не хотите.Посмотрите этот ответ Oveflow Stack или документы для получения дополнительной информации
git clean
.источник
К сожалению , ни один
git rm --cached
илиgit clean -d -fx ""
не сделал это для меня.Мое решение закончилось тем, что я перенес мою ветку на удаленный сервер, клонировал новый репо, а затем осуществил слияние с новым репо. Другие люди, имеющие доступ к репо, должны были сделать то же самое.
Мораль истории: используйте
.gitignore
файл с самого начала.источник
Если вы хотите быстро решить этот вопрос, вы можете использовать эту команду:
источник
.gitignore
afaik.Это случилось со мной в системе Windows 8 , используя Git из командной строки. Остальная часть моей команды использует TFS , и я использую git-tf от Microsoft для передачи / извлечения между TFS и моим локальным Git-репозиторием.
Проблема возникла из-за того, что некоторые файлы были переименованы только для изменения их регистра . То, что, кажется, случилось, было этим:
git status
, я не увидел никаких изменений, так как в командной строке Windows эти имена файлов эквивалентны.Самым простым решением для меня было:
git checkout
предыдущая версия проекта, задолго до того, как эти файлы были добавлены .git checkout
самая последняя версия проекта, с правильной файловой оболочкой.источник
У меня была такая же проблема при проверке ветки на основе более раннего коммита. Git отказался оформить заказ из-за неотслеживаемых файлов.
Я нашел решение и надеюсь, оно вам тоже поможет.
Добавление затронутых каталогов
.gitignore
и выдача$ git rm -r --cached
на них, по-видимому, недостаточно.Предположим, вы хотите создать ветку на основе более раннего коммита K, чтобы протестировать некоторые вещи и вернуться к текущей версии. Я бы сделал это в следующих шагах:
Настройте неотслеживаемые файлы: отредактируйте
.gitignore
и примените$ git rm -r --cached
к файлам и каталогам, которые Git должен игнорировать. Добавить также файл.gitignore
сам в.gitignore
и не забудьте вопрос$ git rm -r --cached .gitignore
. Это гарантирует, что поведение игнорирования git оставляет то же самое в предыдущих коммитах.Передайте изменения, которые вы только что сделали:
Сохраните текущий журнал, иначе у вас могут возникнуть проблемы с возвратом к текущей версии
$ git log > ../git.log
Хард ресет к коммиту K
$ git reset --hard version_k
Создать ветку на основе коммита K
$ git branch commit_k_branch
Оформить заказ в эту ветку
$ git checkout commit_k_branch
Делай свои вещи и совершай это
Оформить заказ снова в мастер
$ git checkout master
Сброс к текущей версии снова
$ git reset current_version
или$ git reset ORIG_HEAD
Теперь вы можете сбросить жесткий в ГОЛОВУ
git reset --hard HEAD
НОТА! Не пропускайте предпоследний шаг (например, например
$ git reset --hard ORIG_HEAD
), иначе не отслеживаемые файлы, о которых говорилось выше, будет потеряна.Я также удостоверился, что файлы, на которые жаловался git, не были удалены. Я скопировал их в текстовый файл и выдал команду
$ for i in $(cat ../test.txt); do ls -ahl $i; done
Если вы снова вернетесь к упомянутой выше ветке, не забудьте выполнить выдачу,
$ git status
чтобы избежать появления нежелательных изменений.источник
В моем случае проблема была с подмодулями.
master
был объединен с другой веткой, которая добавила новый субмодуль в проект. В ветке, которую я пытался оформить, его не было, поэтому git жаловался на неотслеживаемые файлы, и ни одно из предложенных решений не помогло мне. Я заставил оформить заказ в моем новом отделении и вытащил мастера.git checkout -f my_branch
git pull origin master
git submodule update --init
источник
Эти две функции
git rm --cached
git checkout -f another-branch
не работает для меня.
Вместо этого я физически удалил файл (в Eclipse), как говорит Git;
и затем я добавляю / фиксирую это.
а потом я потянул и все заработало!
источник
В моем случае
git rm --cached
не сработало. Но я получил это сgit rebase
источник
Я также столкнулся с подобной проблемой, и я попробовал все решения, опубликованные выше, но это не сработало
Проблема была вызвана , когда я переименовал мой
onMusicUpdateListener.java
ToOnMusicUpdateListener.java
вdevelop
отрасли.Теперь
master
имелonMusicUpdateListener.java
иdevelop
имел тот же файл, что иOnMusicUpdateListener.java
Теперь всякий раз, когда я переключался на мастера, это давало мне ошибку
а потом это
aborted
.Для того , чтобы решить эту проблему, я с силой
checked out
master
расшириться , а затем переименовал мойonMusicUpdateListener.java
кOnMusicUpdateListener.java
,committed
он и тогдаmerged
она сdevelop
ветки.Затем я обновил свою
develop
ветку поmerging
нему вmaster
и теперь все возвращается к нормальной жизни, и проблема решена.источник
Это может быть проблема с разрешением,
изменить владельца,
источник
Проблема может быть в 2 файлах с одинаковым именем, но в другом регистре.
Вы можете удалить один из этих файлов или переименовать его. Пример:
источник
Переместить файлы вместо удаления
Один из способов избежать удаления файлов - переместить их. Например:
источник
Если вы переименовали файл локально, а затем сделали a
pull
, он отобразит это сообщение об ошибке.источник
это легко решить, git говорит, что у вас есть одинаковые файлы в обеих ветвях, поэтому вы должны удалить определенные файлы из основной ветки, и тогда вы сможете объединить:
Я надеюсь, что это работает для вас, я только что решил свою ошибку. моя ошибка была:
Теперь это работает! В моем случае
.vs/slnx.sqlite
была сгенерирована Visual Studio, мне нужно было закрыть его, прежде чем удалить его.источник
В моем случае я видел эту ошибку, потому что я использую популярную CMS с открытым исходным кодом, и каталог, который вызывал проблемы, был каталогом загрузок, в который пишет CMS.
Так что это говорит о том, что есть файлы, которых у вас нет, но которые вы не можете получить от контроля версий.
Я перехватываю все файлы с живого сайта на свой локальный, затем проверяю это в репозитории в надежде, что это решит проблему.
источник
Удалите файл .gitignore из appname / gen /, чтобы решить эту проблему.
источник
Я просто пошел в файловую систему и удалил файл напрямую, затем продолжил с git checkout, и это сработало.
Я сталкивался с проблемой несколько раз, и это может быть связано с тем, что разработчики делают удаление, push, re-add, push или что-то подобное.
источник
В большинстве ответов рассматривается удаление или удаление файлов, что является простым способом. Но иногда вы не хотите избавляться от локальных файлов. Но объединяйтесь со стратегией, так что у git есть решение и для этого;
источник
Просто удалите файлы или переименуйте их.
например
Мне пришлось переименовать / удалить ajax / product.php и ajax / produtPrice.php .
Не волнуйтесь, Git Pull вернет их обратно. Я предлагаю вам переименовать их, а не удалять, потому что вы можете потерять некоторые изменения.
Если это не помогает, то вы должны удалить всю ветку и создать ее заново, а затем сделать
git pull origin remotebranch
источник
Чтобы сохранить измененные файлы и использовать измененный контент позже. Я обнаружил эту ошибку, когда я пытаюсь проверить ветку и при попытке перебазировать. Попробуй Git stash
git stash
источник
Проверьте, если какое-либо имя папки имеет «/» или какой-либо специальный символ, затем переименуйте эти папки. Затем вы просто клонируете хранилище в другое место.
источник
Простое решение может быть следующим: просто убедитесь, что вы находитесь в правильном рабочем каталоге в
GitBash
. Это сообщение возникает почти каждый раз, когда пользователь пытается объединить каталог слишком высоко в своей иерархии папок.Пример:
Сценарий: пользователь клонировал репо,
git-folder
он создал новый проект Java в Eclipse, импортировал клонированное репо. Eclipse установил myProjectSourceFolder в качестве папки источника в своем локальном проекте. поэтому Пользователь ввел его в git bash и толкнул, вытащил и зафиксировал свой проект оттуда. Поэтому git синхронизируется,myProjectSourceFolder
но не имеет записи в своей истории для myBashSourceFolder. Поэтому push / pull / merge из myBashSourceFolder произведет заданный вывод, если пользователь попытается выполнить синхронизацию оттуда в следующий раз вместо папки, с которой он работал раньше.источник