Поэтому я добавил папку в свой файл .gitignore.
Как только я делаю «статус», это говорит мне
# 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/*
Как мне это работать, чтобы я мог переключать ветви, не удаляя эти файлы?
Если я внесу изменения, повлияет ли это на эти файлы? Другими словами, если бы я вернулся в эту ветку позже, все было бы идеально, вплоть до моего последнего коммита?
Я не хочу терять эти файлы, я просто не хочу, чтобы они отслеживались.
Я также попал в это сообщение. В моем случае я не хотел хранить файлы, так что это сработало для меня:
git clean -d -f .
git clean -d -f ""
Если вы также хотите удалить файлы, игнорируемые git, выполните следующую команду.
git clean -d -fx .
git clean -d -fx ""
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
означает, что игнорируемые файлы также удаляются, а также файлы, неизвестные git.
-d
означает удаление неотслеживаемых каталогов в дополнение к не отслеживаемым файлам.
-f
требуется, чтобы заставить его бежать.
Предупреждение: это удалит локальные файлы, которые не проиндексированы
Просто заставьте это: git checkout -f other-branch
Кажется, вы хотите, чтобы файлы игнорировались, но они уже были готовы. .gitignore не влияет на файлы, которые уже находятся в репо, поэтому их необходимо удалить с помощью git rm --cached
. -cached
предотвратит его какое-либо влияние на вашу рабочую копию и просто пометит как удаленный при следующем совершении. После удаления файлов из репо .gitignore предотвратит их повторное добавление.
Но у вас есть еще одна проблема с вашим .gitignore, вы чрезмерно используете подстановочные знаки, и это приводит к тому, что он соответствует меньше, чем вы ожидаете. Вместо этого давайте изменим .gitignore и попробуем это.
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Git говорит вам, что хочет создавать файлы (названные public / system / images / 9 /...
и т. д.), но у вас уже есть существующие файлы в этом каталоге, которые не отслеживаются Git. Возможно, кто-то еще добавил эти файлы в репозиторий Git, и вы впервые переключились на эту ветку?
Вероятно, есть причина, по которой эти файлы в вашей ветке develop
, но не в вашей текущей ветке. Возможно, вам придется спросить своих сотрудников, почему это так.
- как мне это работать, чтобы я мог переключать ветви, не удаляя эти файлы?*
Вы не можете сделать это, не заставив файлы как-то исчезнуть. Вы можете переименовать «public» в «my_public» или что-то еще.
- если бы я вернулся в эту ветку потом, все было бы идеально, вплоть до моего последнего коммита?*
Если вы совершите свои изменения, Git не потеряет их. Если вы не совершите свои изменения, Git постарается не перезаписать выполненную вами работу. Это то, о чем Git предупреждает вас в первую очередь здесь (когда вы пытались переключить ветви).
Это сработало для меня.
1. git fetch --all
2. git reset --hard origin/{branch_name}
Для этой деликатной задачи есть команда (постоянно удаляющая не отслеживаемые файлы)
git clean -i
Тогда git pull
подойдет.
Для тех, кому нужно что-то менее масштабное, чем ответ Скотта Шафера,
git clean -f
скорее всего будет работать. Я highly предлагаю бежать
git clean --dry-run
первый. Эта команда выведет список файлов, которые Git удалит, если вы запустите git clean -f
, и может избавить вас от непреднамеренного удаления чего-то, чего вы не хотели.
См. Этот ответ Stack Oveflow или документы для получения дополнительной информации о «git clean».
К сожалению, ни git rm --cached
, ни `git clean -d -fx "" не сделали это для меня.
Мое решение закончилось тем, что подтолкнуло мою ветку к удаленному, клонировало новое репо, а затем сделало мое слияние в новом репо. Другие люди, получавшие доступ к репо, должны были сделать то же самое.
Мораль истории: используйте файл .gitignore
с самого начала.
У меня была та же проблема при проверке в ветке на основе более раннего коммита. Git отказался от проверки из-за не отслеживаемых файлов.
Я нашел решение, и я надеюсь, что оно вам тоже поможет.
Добавление затронутых каталогов в .gitignore
и выдача $ git rm -r --cached
на них, по-видимому, недостаточно.
Предположим, вы хотите создать ветку на основе более раннего коммита K, чтобы протестировать некоторые вещи и вернуться к текущей версии. Я бы сделал это в следующие шаги:
Настройка неотслеживаемых файлов:
отредактируйте .gitignore
и примените $ git rm -r --cached
к файлам и каталогам, которые вы хотите игнорировать. Добавьте также сам файл .gitignore
в .gitignore
и не забудьте выпустить $ git rm -r --cached .gitignore
. Это обеспечит, чтобы игнорируемое поведение git оставляло то же самое в более ранних коммитах.
Совершите изменения, которые вы только что сделали:
$ git add -A
< br / >
$ git commit
Сохраните текущий журнал, иначе у вас могут возникнуть проблемы с возвращением к текущей версии
$ git log > ../git.log
Жесткий сброс к коммиту К
$ 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
НОТА!
Не пропустите следующий шаг (например, e. г. $ git reset --hard ORIG_HEAD
) в противном случае не отслеживаемые файлы, на которые жаловался выше, будут потеряны.
Я также удостоверился, что файлы, на которые жаловался git, не были удалены. Я скопировал их в текстовый файл и выпустил команду $ для i in $ (кат ../test.txt); делать ls -ahl $ i; сделанный
Если вы снова перейдете в упомянутую выше ветку, не забудьте выдать $ git status
, чтобы убедиться, что нежелательных изменений не появилось.
Это случилось со мной в системе Windows 8 , используя Git из командной строки. Остальная часть моей команды использует TFS , и я использую Microsoft git-tf для перемещения / извлечения между TFS и моим локальным хранилищем Git.
Проблема возникла из-за некоторых файлов, которые были переименованы только для изменения их дела . То, что, кажется, произошло, было следующее:
Самым простым решением для меня было:
git checkout
предыдущая версия проекта, задолго до того, как эти файлы были когда-либо добавлены .git checkout
последняя версия проекта, с правильным корпусом файла.В моем случае проблема была с подмодулями. master
был объединен с другой веткой, которая добавила новый подмодуль в проект. В ветке, которую я пытался проверить, его не было, поэтому Гит жаловался на не отслеживаемые файлы, и ни одно из других предложенных решений не сработало для меня. Я заставил оформить заказ в мою новую ветку и вытащил мастера.
git checkout -f my_branch
git submodule update --init
Я также столкнулся с аналогичной проблемой, и я попробовал все решения, опубликованные выше, но это не сработало
Проблема возникла, когда я переименовал мой onMusicUpdateListener.java
в OnMusicUpdateListener.java
в ветке develop
.
Теперь у master
был onMusicUpdateListener.java
и develop
имел тот же файл, что и OnMusicUpdateListener.java
Теперь, когда я переключался на мастера, это давало мне ошибку
The following untracked working tree files would be overwritten by checkout
а потом это "отменено".
Чтобы решить эту проблему, я принудительно «проверил» «основную» ветку
а затем переименовал мой onMusicUpdateListener.java
в OnMusicUpdateListener.java
, committed
it, а затем объединил
с веткой develop
.
Затем я обновил свою ветку «develop», «слияя» ее в «master», и теперь все возвращается на круги своя, и проблема решается.
Эти две функции (git rm --cached, git checkout -f other-branch) НЕ работал для меня.
Вместо этого я физически удалил файл (в затмении), как то, что Git говорит вам делать; Пожалуйста, переместите или удалите их, прежде чем вы сможете переключать ветви.
и тогда я добавил / совершил это.
а потом я потянул и это сработало!
Это может быть проблема разрешения
сменить владельца
sudo chown -v -R usr-name:group-name folder-name
2 файла с одним и тем же именем, но в другом случае может возникнуть проблема.
Вы можете удалить один из этих файлов или переименовать его. Ex:
Pdf.html.twig (The GOOD one)
pdf.html.twig (The one I deleted)
это легко решить, git говорит, что у вас одинаковые файлы в обеих ветках, поэтому вам нужно удалить определенные файлы из основной ветки, и тогда вы сможете слиться:
git merge "ваша ветка"
Надеюсь, это сработает для вас, я только что решил свою ошибку. моя ошибка была:
ошибка: следующие не отслеживаемые файлы рабочего дерева будут перезаписаны слиянием: .vs / slnx.sqlite Пожалуйста, переместите или удалите их, прежде чем вы объединитесь. Прервать
Сейчас это работает! В моем случае .vs / slnx.sqlite был сгенерирован визуальной студией, мне нужно было закрыть его, прежде чем удалять его.