2015-06-25 2 views
4

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

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

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

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

Шкатулка файл ('мерзавец stash'), а затем положить его обратно тянуть с' мерзавца тайник apply'. Исправить любые конфликты слияния – FDinoff

+1

Спасибо @FDinoff. Это два дополнительных шага в этом процессе. Нет ли способа сделать это за 0 шагов (с опцией)? Я мог бы также использовать 'mv' из командной строки, что не требует, чтобы я читал справочную страницу или сражался с инструментом управления исходным кодом. – jww

+0

Не знаю, о чем я знаю. – FDinoff

ответ

1

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

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

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

git stash pop [email protected]{<revision>} 

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

git checkout HEAD^ file/to/overwrite 
git pull 

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

git pull -f 
Смежные вопросы