Можно ли вытащить только один файл в Git?
Я работаю над веткой Git, в которой есть неработающие тесты, и я хотел бы вытащить (объединить изменения, а не просто перезаписать) эти тесты из другой ветки, где они уже исправлены.
Я знаю, что могу сделать
git pull origin that_other_branch
но это попытается объединить множество других файлов, для этого я еще не готов.
Можно ли вытащить и объединить только указанный файл (и не все) из этой другой ветки?
Это не дубликат Git pull-запроса только для одного файла, поскольку все ответы на этот вопрос - как вернуть локально измененный файл в версию репозитория, не меняя ветвей.
Ответы
Ответ 1
Вы можете получить, а затем проверить только один файл следующим образом:
git fetch
git checkout -m <revision> <yourfilepath>
git add <yourfilepath>
git commit
Относительно команды git checkout
: <revision>
- имя ветки, т.е. origin/master
<yourfilepath>
не включает имя репозитория (которое можно получить, нажав кнопку copy path
на странице файла на GitHub), т.е. README.md
Ответ 2
Вот немного более простой метод, который я только придумал, исследуя это:
git fetch {remote}
git checkout FETCH_HEAD -- {file}
Ответ 3
git checkout master -- myplugin.js
мастер = название ветки
myplugin.js = имя файла
Ответ 4
Ответ @Mawardy работал для меня, но мои изменения были на пульте, поэтому мне пришлось указать источник
git checkout origin/master -- {filename}
Ответ 5
# Navigate to a directory and initiate a local repository
git init
# Add remote repository to be tracked for changes:
git remote add origin https://github.com/username/repository_name.git
# Track all changes made on above remote repository
# This will show files on remote repository not available on local repository
git fetch
# Add file present in staging area for checkout
git check origin/master -m /path/to/file
# NOTE: /path/to/file is a relative path from repository_name
git add /path/to/file
# Verify track of file(s) being committed to local repository
git status
# Commit to local repository
git commit -m "commit message"
# You may perform a final check of the staging area again with git status