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

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

我知道我能做到

git pull origin that_other_branch

但这将尝试合并许多其他文件,为此我还没有准备好。

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

这不是Git pull request for just a file . 的副本,因为这个问题的所有答案都是如何在不更改任何分支的情况下将本地更改的文件恢复到存储库版本。

367067 次浏览

你可以通过这种方式获取并签出一个文件:

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

关于git checkout命令:

  • <revision>——分支名称,即origin/master
  • <yourfilepath>不包括存储库名称(你可以通过点击GitHub文件页面上的copy path按钮来获得),即README.md

这是我在研究这个问题时想到的一个稍微简单的方法:

git fetch {remote}
git checkout FETCH_HEAD -- {file}
git checkout master -- myplugin.js

Master =分支名称

Myplugin.js =文件名

@Mawardy的回答对我有用,但我的更改是在远程上进行的,所以我必须指定原点

git checkout origin/master -- {filename}

是的,流程如下:

# 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

为了用来自其他repo或分支的文件覆盖本地文件,命令是…

git checkout remoteName/branchName filePath

这是我之前用过的一个例子……

git checkout origin/master package-lock.json