Как вытащить для всех файлов, кроме одного?
Я хочу вытащить изменения, кроме одного файла (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
)