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

h22*_*h22 157 git git-pull git-merge git-fetch

我正在开发一个Git分支,它有一些破坏的测试,我想从另一个已经修复的分支中提取(合并更改,而不仅仅是覆盖)这些测试.

我知道我能做到

git pull origin that_other_branch
Run Code Online (Sandbox Code Playgroud)

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

是否可以从另一个分支中提取和合并指定的文件(而不是所有内容)?

不仅仅是对一个文件Git pull请求的重复,因为该问题的所有答案都是如何将本地更改的文件还原到存储库版本,而不更改任何分支.

Chr*_*ris 236

在研究这个时,我只是想出了一个稍微简单的方法:

git fetch {remote}
git checkout FETCH_HEAD -- {file}
Run Code Online (Sandbox Code Playgroud)

  • 致命:无效参考:FETCH_HEAD (3认同)
  • 这个答案可能缺少有效的例子。目前尚不清楚是否需要下一步提交。 (2认同)
  • 与 pull 不同,pull 会尝试合并,这就是我们要使用 pull 的原因。 (2认同)

ale*_*oot 137

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

git fetch
git checkout -m <revision> <yourfilepath>
git add <yourfilepath>
git commit
Run Code Online (Sandbox Code Playgroud)

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

  • -m开关所需的哈希码可以用git branch -v打印.真棒! (22认同)
  • 是否可以在不拉动其他文件的情况下提取特定文件? (4认同)
  • 优秀.这不止一次帮助了我.为了澄清,-m标志似乎对您要从中提取单个文件的提交的哈希感到满意. (2认同)
  • @aleroot <revision>代表什么? (2认同)
  • @Tanka修订版代表提交SHA或标记名称或分支名称... (2认同)

Maw*_*rdy 17

git checkout master -- myplugin.js
Run Code Online (Sandbox Code Playgroud)

master =分支名称

myplugin.js =文件名

  • 不要忘记之前“git pull”;) (3认同)

Luk*_*noy 7

@Mawardy的答案对我有用,但是我的更改在远程进行,因此我必须指定来源

git checkout origin/master -- {filename}
Run Code Online (Sandbox Code Playgroud)


Sha*_*ton 6

为了用其他存储库或分支中的文件覆盖本地文件,命令是...

git checkout remoteName/branchName filePath
Run Code Online (Sandbox Code Playgroud)

这是我以前使用过的一个例子......

git checkout origin/master package-lock.json
Run Code Online (Sandbox Code Playgroud)