是否可以在Git中仅提取一个文件?


176

我正在一个测试失败的Git分支上工作,我想从已经固定了它们的另一个分支中提取(合并更改,而不仅仅是覆盖)这些测试。

我知道我能做

git pull origin that_other_branch

但这将尝试合并许多其他文件,因为我尚未准备好。

是否有可能仅从另一个分支拉并合并指定的文件(而不是所有文件)?

这不是对一个文件Git拉取请求的重复,因为对该问题的所有答案都是如何在不更改任何分支的情况下将本地更改的文件还原到存储库版本。


6
我相信此页面上的所有条目都无法提供问题的答案。这个问题意味着从远程服务器仅提取一个文件,而不是提取所有文件并仅在本地检出一个文件。因此,应该重做该问题,或者将选定的答案未标记为该问题的解决方案。
mljrg

Answers:


152

您可以通过这种方式获取然后仅检出一个文件:

git fetch
git checkout -m <revision> <yourfilepath>
git add <yourfilepath>
git commit

关于git checkout命令: <revision> -分支名称,即origin/master <yourfilepath>不包括存储库名称(您可以通过单击copy pathGitHub上文件页面上的按钮获得该名称),即README.md


23
可以使用git branch -v打印-m开关所需的哈希码。太棒了!
Audrius Meskauskas

2
优秀的。这对我有不止一次的帮助。为了明确起见,-m标志似乎对您要从中提取单个文件的提交的哈希感到满意。
rd108 2013年

1
这也为我工作。不过,我在远程分支上运行了git log来查找还原:例如,$ git log remotes / origin / master
Dan

6
是否可以拉特定文件而不拉其他文件?
感觉不错,编程很不错

3
@aleroot <revision>代表什么?
Wakan Tanka

240

这是我在研究此方法时想出的一种更简单的方法:

git fetch {remote}
git checkout FETCH_HEAD -- {file}

4
致命:无效引用:FETCH_HEAD
安东尼·安德里亚

3
这个答案可能缺少可行的例子。目前尚不清楚是否需要下一步提交。
Dr_Zaszuś

@Chris如果我们已经在Branch中,我们是否需要{remote}?如果是,为什么?
Cloud Cho

1
与pull尝试尝试合并不同,这就是我们要使用pull的原因。
JosephK

22
git checkout master -- myplugin.js

主=分支名称

myplugin.js =文件名


并有一种方法可以还原吗?
liyuan

1
别忘了先'git pull';)
Matson Kepson


2

是的,这里是过程:

# 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.