Следующие неотслеженные файлы рабочего дерева будут перезаписаны слиянием, но мне все равно
на моей ветке у меня было несколько файлов.gitignore
на другой ветке эти файлы не находятся.
Я хочу объединить разные ветви в мою, и мне все равно, если эти файлы больше не игнорируются или нет.
к сожалению, я получаю это:
следующие неотслеженные файлы рабочего дерева будут перезаписаны merge
Как бы я изменил свою команду pull, чтобы перезаписать эти файлы, без меня найти, переместить или удалить эти файлы сам?
10 ответов:
проблема в том, что вы не отслеживаете файлы локально, но идентичные файлы отслеживаются удаленно, поэтому для того, чтобы "вытащить" вашу систему будет вынужден перезаписать локальные файлы, которые не контролируются версией.
попробуй
git add * git stash git pullЭто позволит отслеживать все файлы, удалить все ваши локальные изменения в эти файлы, а затем получить файлы с сервера.
Вы можете попробовать команду, чтобы очистить неотслеживаемые файлы с локального
git 2.11 и новее
git clean -d -f .старше ГИТ
git clean -d -f ""где -d можно заменить следующим:
- x означает, что игнорируемые файлы также удаляются, а также файлы, неизвестные git.
- d означает удаление не отслеженных каталогов в дополнение к не отслеженным файлам.
- f требуется, чтобы заставить его бежать.
здесь ссылке это тоже может быть полезно.
единственные команды, которые работали для меня были:
git fetch --all git reset --hard origin/{{your branch name}}
Если это одноразовая операция, вы можете просто удалить все неотслеженные файлы из рабочего каталога, прежде чем делать pull. Читайте Как удалить локальные (неотслеженные) файлы из текущего рабочего дерева Git? для получения информации о том, как удалить все неотслеживаемые файлы.
Не забудьте случайно удалить неотслеженный файл, который вам все еще нужен;)
Если вы рассматриваете использование
-fфлаг вы можете сначала запустить его как сухой прогон. Только то, что вы заранее знаете, какую интересную ситуацию вы закончите следующим ; - P-n --dry-run Don’t actually remove anything, just show what would be done.
в дополнение к принятому ответу вы можете, конечно, удалить файлы, если они больше не нужны, указав файл:
git clean -f '/path/to/file/'Не забудьте сначала запустить его с флагом-n, если вы хотите увидеть, какие файлы git clean удалит. Обратите внимание, что эти файлы будут удалены. В моем случае я не заботился о них в любом случае, так что это было лучшее решение для меня.
git merge -fне выход, ноgit checkout -fделает.git checkout -f donor-branch git checkout receiving-branch git merge donor-branchэто работает, потому что Вы делаете git force-checkout другой ветви, и тем самым принудительно заменяете неотслеженные файлы их отслеживаемыми версиями. Если вы затем вернетесь в исходную ветвь, отслеживаемые файлы исчезнут, как и в каждой проверке, где файлы не существуют в целевой ветви.
вы упомянули a в вашем ответе. Тянуть-это не что иное, как
git fetch(получить удаленную историю) + автоматическое слияние восходящей ветви; если вы предшествуете решению выше сgit fetch, и объединить ветку вверх по течению, шаги будут выглядеть следующим образом.git fetch origin git checkout -f origin/mybranch git checkout mybranch git merge origin/mybranch
как этот ответ отличается от других ответов?
этот метод удаляет только файлы, которые будут перезаписаны путем слияния. Если у вас есть другие неотслеженные (возможно, проигнорированные) файлы в каталоге, этот метод не удалит их.
решение
этот фрагмент извлекает все неотслеженные файлы, которые будут перезаписаны
git pullи удалить их.git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} rm -rf "{}"а потом просто делать:
git pullэто не git фарфоровая команда, поэтому всегда дважды проверяйте, что она будет делать с:
git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} echo "{}"объяснение-потому что один лайнеры страшно:
вот расстройство того, что он делает:
git pull 2>&1захватgit pullвыход и перенаправить все это в stdout, так что мы можем легко захватить его сgrep.grep -E '^\s- намерение состоит в том, чтобы захватить список игнорируемых файлов, которые будут перезаписаныgit pull. Имена файлов имеют кучу пробелов перед ними, поэтому мы используем его, чтобы получить их.cut -f2-- удалить пробелы в начале каждой строки, захваченной в 2.xargs -I {} rm -rf "{}"СШАxargsчтобы перебрать все файлы, сохраните их имя в "{} " и вызовитеrmдля каждого из них. Мы используем-rfдля принудительного удаления и удаления неотслеженных каталогов.было бы здорово заменить шаги 1-3 с фарфоровой командой, но я не знаю никакого эквивалента.
Comments