.gitignore и "Следующие неотслеживаемые файлы рабочего дерева будут перезаписаны извлечением"

Итак, я добавил папку в мой файл .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/*

Как мне получить эту работу, чтобы я мог переключаться между ветвями, не удаляя эти файлы?

Если я внес изменения, это повлияет на эти файлы? Другими словами, если бы я вернулся в эту ветку, то все было бы идеально по сравнению с моей последней фиксацией?

Я не хочу потерять эти файлы, я просто не хочу, чтобы их отслеживали.

Ответ 1

Похоже, вы хотите, чтобы файлы игнорировались, но они уже были совершены. .gitignore не влияет на файлы, которые уже находятся в репо, поэтому их нужно удалить с помощью git rm --cached. --cached не позволит ему повлиять на вашу рабочую копию, и она будет просто отмечена как удаленная при следующем фиксации. После того, как файлы будут удалены из репо, тогда .gitignore помешает им снова добавить.

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

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/

Ответ 2

ВНИМАНИЕ: он удалит неотслеживаемые файлы, так что это не лучший ответ на поставленный вопрос.

Я ударил это сообщение также. В моем случае я не хотел хранить файлы, так что это сработало для меня:

мерзавец 2.11 и новее

git clean  -d  -f .

старый мерзавец

git clean  -d  -f ""

Если вы также хотите удалить файлы, игнорируемые git, выполните следующую команду.

ИМЕЙТЕ В ВИДУ!!! ЭТО НАИБОЛЕЕ ВЕРОЯТНО УНИЧТОЖАЕТ ВАШ ПРОЕКТ, ИСПОЛЬЗУЙТЕ ТОЛЬКО ЕСЛИ ВЫ ЗНАЕТЕ 100% ЧТО ВЫ ДЕЛАЕТЕ

мерзавец 2.11 и новее

git clean  -d  -fx .

старый мерзавец

git clean  -d  -fx ""

http://www.kernel.org/pub/software/scm/git/docs/git-clean.html

  • -x означает, что игнорируемые файлы также удаляются, а также файлы, неизвестные git.

  • -d означает удаление неотслеживаемых каталогов в дополнение к неотслеживаемым файлам.

  • -f требуется, чтобы заставить его работать.

Ответ 3

Предупреждение: это удалит локальные файлы, которые не проиндексированы

Просто принудительно: git checkout -f another-branch

Ответ 4

Если вы находитесь в OS X, возможно, это связано с тем, что имя файла имеет определенные символы. Попробуйте установить следующий вариант конфигурации:

git config core.ignorecase true

Ответ 5

Git сообщает вам, что он хочет создавать файлы (с именем public/system/images/9/... и т.д.), но у вас уже есть существующие файлы в этом каталоге, которые не отслеживаются Git. Возможно, кто-то еще добавил эти файлы в репозиторий Git, и это первый раз, когда вы переключились на эту ветку?

Вероятно, причина в том, что эти файлы в вашем ветке develop, но не в вашей текущей ветке. Возможно, вам придется спросить своих сотрудников, почему это так.

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

Вы не можете сделать это, не заставляя файлы как-то исчезать. Вы можете переименовать public в my_public или что-то еще.

Если бы я вернулся в эту ветку, то все было бы прекрасно, вплоть до моей последней фиксации?

Если вы сделаете свои изменения, Git не потеряет их. Если вы не совершаете свои изменения, то Git будет очень стараться не перезаписывать выполненную вами работу. Это то, о чем Git предупреждает вас в первом случае здесь (когда вы пытались переключить ветки).

Ответ 6

Существует команда для этой деликатной задачи (постоянное удаление ненужных файлов)

git clean -i

Тогда git pull будет делать.

Ответ 7

Это сработало для меня.

 1. git fetch --all
 2. git reset --hard origin/{branch_name}

Ответ 8

К сожалению, ни git rm --cached, ни git clean -d -fx "" не сделали это для меня.

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

Мораль истории: используйте файл .gitignore с самого начала.

Ответ 9

Для тех, кому нужно что-то менее серьезное, чем ответ Скотта Шаферса,

git clean -f

скорее всего сработает. Я настоятельно рекомендую бежать

git clean --dry-run

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

Посмотрите этот ответ Stack Oveflow или документы для получения дополнительной информации о git clean.

Ответ 10

Если вы хотите быстро решить этот вопрос, вы можете использовать эту команду:

git checkout -f dev

Ответ 11

У меня была такая же проблема при проверке ветки на основе более раннего фиксации. Git отказался от проверки из-за невоспроизводимых файлов.

Я нашел решение и надеюсь, что это тоже поможет.

Добавление затронутых каталогов на .gitignore и выдача $ git rm -r --cached на них, по-видимому, недостаточно.

Предположим, что вы хотите сделать ветку на основе более раннего фиксации K, чтобы проверить некоторые вещи и вернуться к текущей версии. Я сделал бы это в следующих шагах:

  • Настройка файлов без следа: отредактируйте .gitignore и примените $ git rm -r --cached к файлам и каталогам, которые вы хотите игнорировать Git. Добавьте также файл .gitignore на .gitignore и не забудьте выпустить $ git rm -r --cached .gitignore. Это обеспечит, чтобы поведение игнорирования Git оставалось прежним в более ранних фиксациях.

  • Зафиксируйте сделанные изменения:

    $ git add -A
    $ git commit

  • Сохраните текущий журнал, иначе могут возникнуть проблемы с возвратом к текущей версии

    $ git log > ../git.log

  • Жесткий reset к фиксации K

    $ git reset --hard version_k

  • Создайте ветвь на основе фиксации K

    $ git branch commit_k_branch

  • Оформить покупку в этой ветке

    $ git checkout commit_k_branch

  • Сделайте ваши вещи и зафиксируйте их

  • Возврат в мастер снова

    $ git checkout master

  • Reset для текущей версии снова

    $ git reset current_version или $ git reset ORIG_HEAD

  • Теперь вы можете reset сгладить HEAD

    git reset --hard HEAD

ВНИМАНИЕ! Не пропустите следующий шаг (например, например, $ git reset --hard ORIG_HEAD ), в противном случае пропавшие без вести файлы Git, указанные выше, будут потеряны.

Я также убедился, что файлы Git, которые жаловались, не были удалены. Я скопировал их в текстовый файл и выдал команду $ for i in $(cat ../test.txt); do ls -ahl $i; done

Если вы снова отправитесь в филиал, упомянутый выше, не забудьте выпустить $ git status, чтобы избежать появления нежелательных изменений.

Ответ 12

Это случилось со мной в системе Windows 8, используя Git из командной строки. Остальная часть моей команды использует TFS, и я использую Microsoft git -tf, чтобы нажимать/тянуть между TFS и локальным репозиторием Git.

Проблема возникла из-за некоторых файлов, которые были переименованы только для изменения своего случая. Похоже, что это произошло:

  • Файлы были проверены со смешанным корпусом в их именах.
  • В более позднем фиксации имена файлов были изменены на все нижестоящие.
  • git -tf сначала получил файлы в смешанном случае.
  • Когда файлы были переименованы в нижний регистр, git -tf не получил файлы, потому что для Windows 8 эти имена файлов эквивалентны.
  • Так как Git чувствителен к регистру, он жаловался, что у меня были файлы смешанного случая, которые не были в контроле источника. Но с помощью git status я не мог видеть никаких изменений, так как в командной строке Windows эти имена файлов эквивалентны.

Простейшим решением для меня было:

  • git checkout предыдущая версия проекта задолго до того, как эти файлы были добавлены.
  • Затем git checkout последняя версия проекта с правильным корпусом файла.

Ответ 13

В моем случае проблема была с подмодулями. master был объединен с другой веткой, которая добавила новый подмодуль в проект. В ветке, которую я пытался оформить, ее не было, поэтому git жаловался на неотслеживаемые файлы, и ни одно из предложенных решений не помогло мне. Я заставил оформить заказ в моем новом отделении и вытащил мастера.

  • git checkout -f my_branch
  • git pull origin master
  • git submodule update --init

Ответ 14

В моем случае git rm --cached не работал. Но я получил его с git rebase

Ответ 15

Я также столкнулся с аналогичной проблемой, и я попробовал все вышеперечисленные решения, но не работал.

Проблема возникла, когда я переименовал мой onMusicUpdateListener.java в onMusicUpdateListener.java в ветке develop.

Теперь master имел onMusicUpdateListener.java и develop имел тот же файл, что и onMusicUpdateListener.java

Теперь, когда я переключился на мастер, он дал мне ошибку

The following untracked working tree files would be overwritten by checkout

а затем aborted.

Чтобы решить эту проблему, я решительно checked out master а затем переименовали мои onMusicUpdateListener.java в onMusicUpdateListener.java, committed, а затем merged с ветвью develop.

Затем я обновил ветвь develop на merging в master, и теперь все возвращается к нормальной работе, и проблема решена.

Ответ 16

Эти две функции (git rm --cached, git checkout -f another-branch) НЕ работал у меня.

Вместо этого я физически удалил файл (в eclipse), как вам говорит Git; Пожалуйста, переместите или удалите их, прежде чем вы сможете переключаться между ветвями.

а затем добавьте/зафиксировали его.

а затем я потянул, и это сработало!

Ответ 17

Это может быть проблема с разрешением,

измените право собственности,

sudo chown -v -R usr-name:group-name folder-name

Ответ 18

2 файла с тем же именем, но может возникнуть проблема с другим.

Вы можете удалить один из этих файлов или переименовать его. Пример:

Pdf.html.twig (The GOOD one)

pdf.html.twig (The one I deleted)

Ответ 19

Переместить файлы вместо удаления

Одним из способов избежать удаления файлов является их перемещение. Например:

cd "`git rev-parse --show-toplevel`"
git checkout 2>&1 | while read f; do [ ! -e "$f" ] || mv "$f" "$f".bak; done

Ответ 20

Если вы переименовали файл локально, а затем выполните pull, он отобразит это сообщение об ошибке.

Ответ 21

это легко решить, git говорит, что у вас есть одинаковые файлы в обеих ветвях, поэтому вы должны удалить определенные файлы из основной ветки, и тогда вы сможете объединить:

git merge "твоя ветка"

Я надеюсь, что это работает для вас, я только что решил свою ошибку. моя ошибка была:

ошибка: следующие неотслеживаемые файлы рабочего дерева будут перезаписаны слиянием:.vs/slnx.sqlite Пожалуйста, переместите или удалите их перед слиянием. Aborting

Теперь это работает! В моем случае .vs/slnx.sqlite был сгенерирован Visual Studio, мне нужно было закрыть его перед удалением.

Ответ 22

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

Так что он говорил, что есть файлы, которых у вас нет, но которые вы не можете получить от управления версиями.

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

Ответ 23

Удалите .gitignore файл из appname/gen/, чтобы решить эту проблему.

Ответ 24

Я просто пошел в файловую систему и удалил файл напрямую, затем продолжил с git checkout, и это сработало.

Я сталкивался с проблемой несколько раз, и это может быть связано с тем, что разработчики делают удаление, push, re-add, push или что-то подобное.

Ответ 25

В большинстве ответов рассматривается удаление или удаление файлов, что является простым способом. Но иногда вы не хотите избавляться от локальных файлов. Но объединяйтесь со стратегией, так что у git есть решение и для этого;

git merge --strategy=ours master 

Ответ 26

Просто удалите файлы или переименуйте их.

например

$ git pull
Enter passphrase for key '/c/Users/PC983/.ssh/id_rsa':
error: Your local changes to the following files would be overwritten by merge:
        ajax/productPrice.php
Please commit your changes or stash them before you merge.
error: The following untracked working tree files would be overwritten by merge:
        ajax/product.php
Please move or remove them before you merge.
Aborting
Updating a04cbe7a..6aa8ead5

Мне пришлось переименовать/удалить ajax/product.php и ajax/produtPrice.php.

Не волнуйтесь, Git Pull вернет их обратно. Я предлагаю вам переименовать их, а не удалять, потому что вы можете потерять некоторые изменения.

Если это не помогает, тогда вы должны удалить всю ветку и создать ее заново, а затем сделать git pull origin remotebranch

Ответ 27

Для сохранения измененных файлов и последующего использования измененного содержимого. Я обнаружил эту ошибку, когда я пытаюсь проверить ветку и при попытке перебазировать. Попробуй Git stash

git stash

Ответ 28

Проверьте, если какое-либо имя папки имеет "/" или какой-либо специальный символ, затем переименуйте эти папки. Затем вы просто клонируете хранилище в другое место.