Как вытащить для всех файлов, кроме одного?

Я хочу вытащить изменения, кроме одного файла (GNUmakefile ниже). Я посмотрел на git-pull(3) справочные страницы, но вариант не всегда подходит для меня.

Как вытащить все изменения, но пропустить файл, который вызывает проблемы с Git? Есть ли опция "игнорировать файлы с конфликтами" или "игнорировать файл X" или подобное?

(Худшая часть GNUmakefile был скопирован / вставлен между виртуальными машинами, поэтому они почти совпадают с файлом. cryptopp-rw Makefile имеет несколько рецептов зависимостей, добавленных в конце).

cryptopp-rw$ git pull
remote: Counting objects: 7, done.
remote: Total 7 (delta 4), reused 4 (delta 4), pack-reused 3
Unpacking objects: 100% (7/7), done.
From https://github.com/weidai11/cryptopp
   4206b4a..cf08f3e  master     -> origin/master
Updating 4206b4a..cf08f3e
error: Your local changes to the following files would be overwritten by merge:
    GNUmakefile
Please, commit your changes or stash them before you can merge.
Aborting

2 ответа

Вы можете спрятать текущее рабочее дерево, а затем сделать пул, таким образом, git не сможет выдать ошибку и прервать процесс. После извлечения вы можете восстановить спрятанные файлы с помощью:

git stash pop stash@{<revision>}

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

git checkout HEAD^ file/to/overwrite
git pull

Или вы можете попробовать потянуть с -f команда:

git pull -f

Учитывая даже git update-index --skip-worktree не помешает git pull после обновления этого файла вы можете использовать обходной путь, например:

  • делая псевдоним gpu вызывая скрипт
  • создание сценария, который будет сохранять этот один файл в другом месте, выполнить git pull, перезаписать этот один файл сохраненным (таким образом, нет конфликта для разрешения из stash pop)
Другие вопросы по тегам