Сценарий:
- Я делаю некоторые изменения в одном файле локально и запускаю
git add
,git commit
иgit push
- Файл помещается в главный репозиторий удаленного источника.
- У меня есть другой локальный репозиторий, который развертывается через Capistrano с помощью метода «remote_cache» из этого удаленного репозитория
- Теперь я не хочу развертывать приложение целиком, а просто обновлять / извлекать этот единственный файл.
Возможно ли это как-то с помощью git? Я не смог найти ничего, что могло бы сработать, и не смог понять это. С SVN я просто так svn up file
и сделал .
git
git-checkout
foresth
источник
источник
git restore -s origin/master -- path/to/file
. Смотрите мой ответ ниже .Ответы:
Это можно сделать (в развернутом репозитории)
Выборка загрузит все последние изменения, но не добавит их в ваш текущий извлеченный код (рабочая область).
Оформление обновит рабочее дерево с конкретным файлом из загруженных изменений (
origin/master
).По крайней мере, это работает для тех маленьких исправлений опечаток, когда кажется странным создавать ветку и т. Д., Просто чтобы изменить одно слово в файле.
источник
git status
я вижу их как ... тоChanges to be committed:
есть, мне нужно снова их зафиксировать? (только отмечая, что я хотел обновить один нетронутый файл, но сам репо затрагивается на другом компьютере)Следующий код работал для меня:
источник
источник
git archive --remote=https://github.com/git/git.git master:git/contrib/completion git-completion.bash | tar -x
выдает мне сообщение об ошибке:fatal: Operation not supported by protocol.
tar
: S--to-stdout
,git archive --remote="gitolite3@<host>:<repo>" <tag> <file> | tar xf - --to-stdout
С Git 2.23 (август 2019 г.) и новой (все еще экспериментальной) командой
git restore
, показанной в разделе « Как сбросить все файлы из рабочего каталога, но не из промежуточной области? », Это будет:Идея такова:
git restore
имеет дело только с файлами, а не с файлами и ветками, как этоgit checkout
делается.Смотрите « Смущенный
git checkout
»: вот, гдеgit switch
приходит)Codersam добавляет в комментариях :
источник
git restore -s upstream/master -- path/to/file
Что вы можете сделать, это:
Обновите ваш локальный репозиторий git:
git fetch
Постройте местный филиал и оформите заказ на нем:
git branch pouet && git checkout pouet
Примените коммит, который вы хотите, к этой ветке:
git cherry-pick abcdefabcdef
(abcdefabcdef - это sha1 коммита, который вы хотите применить)
источник
git checkout -b pouet
.Или git stash (если у вас есть изменения) в текущей ветке, извлеките мастер, извлеките последние изменения, загрузите этот файл на рабочий стол (или во все приложение). Оформите ветку, в которой вы были. Git stash примените обратно к состоянию, в котором вы находились, затем исправьте изменения вручную или перетащите его, заменив файл.
Этот способ не очень крутой, но он работает, если вы, ребята, ничего не можете понять.
источник
Я думаю, что нашел легкий взлом.
Удалите файл, который у вас есть в локальном хранилище (файл, который вы хотите обновить с последней фиксации на удаленном сервере)
А потом сделать
git pull
Поскольку файл удален, конфликта не будет
источник