git checkout master # first get back to master
git checkout experiment -- app.js # then copy the version of app.js
# from branch "experiment"
Смотрите также git, как отменить изменения одного файла?
Обновление августа 2019 года, Git 2.23
С новыми командами git switch
и git restore
командами это будет:
git switch master
git restore -s experiment -- app.js
По умолчанию восстанавливается только рабочее дерево.
Если вы также хотите обновить индекс (то есть восстановить содержимое файла и добавить его в индекс одной командой):
git restore -s experiment --staged --worktree -- app.js
# shorter:
git restore -s experiment -WS -- app.js
Как отмечает в комментариях Якуб Наребски :
git show experiment:path/to/app.js > path/to/app.js
тоже работает, за исключением того, что, как подробно описано в вопросе SO « Как извлечь отдельный файл из определенной ревизии в Git? », вам нужно использовать полный путь из корневого каталога репозитория.
Отсюда путь / к / app.js, который использовал Якуб в своем примере.
Как Морозный упоминает в комментарии:
вы получите только самое последнее состояние app.js
Но для git checkout
или git show
вы можете ссылаться на любую ревизию, которую хотите, как показано в вопросе SO « git checkout revision of the file in git gui »:
$ git show $REVISION:$FILENAME
$ git checkout $REVISION -- $FILENAME
будет то же самое, если $ FILENAME - это полный путь к версионному файлу.
$REVISION
может быть как показано в git rev-parse
:
experiment@{yesterday}:app.js # app.js as it was yesterday
experiment^:app.js # app.js on the first commit parent
experiment@{2}:app.js # app.js two commits ago
и так далее.
Schmijos добавляет в комментариях :
Вы также можете сделать это из тайника:
git checkout stash -- app.js
Это очень полезно, если вы работаете над двумя ветками и не хотите фиксировать.