На моей ветке у меня было несколько файлов в .gitignore
В другой ветке этих файлов нет.
Я хочу объединить другую ветку с моей, и мне все равно, если эти файлы больше не игнорируются или нет.
К сожалению, я получаю это:
Следующие неотслеживаемые файлы рабочего дерева будут перезаписаны слиянием
Как бы я изменил свою команду pull, чтобы перезаписать эти файлы, без необходимости самостоятельно искать, перемещать или удалять эти файлы?
Ответы:
Проблема заключается в том, что вы не отслеживаете файлы локально, а идентичные файлы отслеживаются удаленно, поэтому для «вытягивания» вашей системы придется перезаписывать локальные файлы, которые не контролируются версией.
Попробуйте запустить
Это позволит отследить все файлы, удалить все локальные изменения этих файлов, а затем получить файлы с сервера.
источник
git add -A .; git stash
работал на меня.git add *
Вариант жаловался игнорируемых путей.Вы можете попробовать команду, чтобы очистить неотслеживаемые файлы от локальных
Git 2.11 и более новые версии:
Старые версии Git:
Где
-d
можно заменить следующим:-x
игнорируемые файлы также удаляются, как и файлы, неизвестные Git.-d
удалить неотслеживаемые каталоги в дополнение к неотслеживаемым файлам.-f
требуется, чтобы заставить его бежать.Вот ссылка, которая также может быть полезна.
источник
-i
для интерактивного режима. Помимо удаления ненужного каталога, я также просто удалил свои пользовательские настройки для проекта :-(-x
может повредить.Единственные команды, которые работали для меня, были:
источник
Замена для
git merge
этого перезапишет неотслеживаемые файлыКомментарии ниже используют «FOI» для «интересующих файлов», файлов, которые
Замена для
git pull
этого перезапишет неотслеживаемые файлыpull = fetch + merge
Итак, мы делаемgit fetch
сgit checkout -f, git checkout, git merge
трюком выше.Детальное объяснение
git merge -f
не существует, ноgit checkout -f
существует.Мы будем использовать
git checkout -f
+git checkout
для удаления интересующих файлов (см. Выше), и тогда ваше слияние может продолжаться в обычном режиме.Шаг 1. Этот шаг принудительно заменяет неотслеживаемую FOI отслеживаемыми версиями ветки-донора (он также проверяет ветку-донора и обновляет оставшуюся часть рабочего каталога).
Шаг 2. Этот шаг удаляет информацию о свободе информации, потому что они отслеживаются в нашей текущей (донорской) ветке и отсутствуют в той, на которую
receiving-branch
мы переключаемся.Шаг 3. Теперь, когда FOI отсутствует, слияние в ветке-доноре не перезапишет никакие неотслеживаемые файлы, поэтому мы не получим ошибок.
источник
Удалить все неотслеживаемые файлы:
источник
Если это одноразовая операция, вы можете просто удалить все неотслеживаемые файлы из рабочего каталога перед выполнением извлечения. Прочтите Как удалить локальные (неотслеживаемые) файлы из текущего рабочего дерева Git? для получения информации о том, как удалить все неотслеживаемые файлы.
Обязательно случайно не удалите неотслеживаемый файл, который вам все еще нужен;)
источник
Вы можете попробовать эту команду
источник
Обновление - лучшая версия
Этот инструмент ( https://github.com/mklepaczewski/git-clean-before-merge ) будет:
git pull
эквивалентам,git pull
эквивалентам,git pull
версии,--pretend
опция, которая не будет изменять любые файлы.Старая версия
Чем этот ответ отличается от других ответов?
Представленный здесь метод удаляет только те файлы, которые будут перезаписаны слиянием. Если в каталоге есть другие неотслеживаемые (возможно, игнорируемые) файлы, этот метод не удалит их.
Решение
Этот фрагмент извлечет все неотслеживаемые файлы, которые будут перезаписаны,
git pull
и удалит их.а затем просто сделайте:
Это не команда git porcelain, поэтому всегда проверяйте, что она будет делать:
Объяснение - потому что один лайнер страшен:
Вот разбивка того, что он делает:
git pull 2>&1
- захватитьgit pull
вывод и перенаправить все это на стандартный вывод, чтобы мы могли легко захватить егоgrep
.grep -E '^\s
- цель состоит в том, чтобы захватить список неотслеживаемых файлов, которые будут перезаписаныgit pull
. Перед именами файлов стоит группа пробельных символов, поэтому мы используем их для их получения.cut -f2-
- удалить пробелы в начале каждой строки, захваченной в 2.xargs -I {} rm -rf "{}"
- намxargs
нужно перебрать все файлы, сохранить их имя в "{}" и вызватьrm
каждый из них. Мы используем-rf
для принудительного удаления и удаления неотслеживаемых каталогов.Было бы здорово заменить шаги 1-3 фарфоровой командой, но я не знаю ни одного эквивалента.
источник
git pull
сgit checkout <branch_name>
Если вы подумаете об использовании
-f
флага, вы можете сначала запустить его как пробный запуск. Только то, что вы заранее знаете, в какой интересной ситуации вы окажетесь дальше ;-Pисточник
В дополнение к принятому ответу вы, конечно, можете удалить файлы, если они больше не нужны, указав файл:
Не забудьте сначала запустить его с флагом -n, если вы хотите посмотреть, какие файлы удалит git clean. Обратите внимание, что эти файлы будут удалены. В моем случае я все равно не заботился о них, так что это было лучшее решение для меня.
источник
Один из способов сделать это - скрыть локальные изменения и вытащить из удаленного хранилища. Таким образом, вы не потеряете свои локальные файлы, так как файлы попадут в тайник.
Вы можете проверить свои локальные спрятанные файлы с помощью этой команды -
git stash list
источник
Для тех, кто не знает, git игнорирует различия в именах файлов и папок в верхнем и нижнем регистре. Это оказывается кошмаром, когда вы переименовываете их в одно и то же имя с другим регистром.
Я столкнулся с этой проблемой, когда переименовал папку из «Petstore» в «petstore» (от прописной до строчной). Я отредактировал свой файл .git / config, чтобы перестать игнорировать регистр, внес изменения, уничтожил мои коммиты и спрятал свои изменения, чтобы перейти в другую ветку. Я не мог применить свои спрятанные изменения к этой другой ветке.
Исправление, которое я нашел, работало, чтобы временно отредактировать мой файл .git / config, чтобы снова временно игнорировать регистр. Это привело
git stash apply
к успеху. Затем я изменил ignoreCase обратно наfalse
. Затем я добавил все, кроме новых файлов в папке petstore, которые, как ни странно утверждали, были удалены по какой-либо причине. Я совершил свои изменения, затем побежалgit reset --hard HEAD
чтобы избавиться от этих неотслеживаемых новых файлов. Мой коммит выглядел точно так, как ожидалось: файлы в папке были переименованы.Я надеюсь, что это поможет вам избежать моего самого кошмара.
источник
git pull -f
тогдаgit checkout .
. Какой кошмар.Ни очистка / сброс / жесткая проверка / ребазирование не работали для меня.
Так что я просто удалил файлы, на которые жалуется git *
* Я проверил, можно ли удалить эти файлы, проверив новый репо в отдельной папке (файлов там не было)
источник
В моем случае, когда у меня возникла эта проблема. У меня был локальный файл, который я переименовал на пульте.
При попытке
git pull
Git сказал мне, что новое имя файла не отслеживалось - оно было на удаленном компьютере, хотя еще не существовало на локальном.Поскольку не было никакого экземпляра этого локально, я не мог сделать,
git pull
пока я не сделалgit rm
по старому имени файла (который не был очевиден сначала из-за моей глупой идеи переименовать это).источник
Если у вас есть файлы, записанные в .gitignore, удалите файлы и снова запустите git pull. Это помогло мне.
источник
Проблема в том, что когда у нас есть входящие изменения, которые объединят неотслеживаемый файл, git жалуется. Эти команды помогли мне:
источник