Git:如何从远程源 (origin master) 更新/检出单个文件?

场景:

  1. 我在本地单个文件中做了一些更改,并运行git addgit commitgit push
  2. 该文件被推送到远程源主存储库
  3. 我有另一个本地存储库,通过Capistrano使用“remote_cache”方法从该远程存储库部署
  4. 现在我不想部署整个应用程序,而只是更新/签出单个文件。

这在某种程度上是可能的git?我没能找到任何可行的方法,也没能搞清楚。对于SVN,我只做了svn up file,瞧。

759130 次浏览

你可以做的是:

  1. 更新本地git回购:

    git fetch < / p >

  2. 构建一个本地分支并在其上签出:

    git branch pouet && git checkout pouet < / p >

  3. 在这个分支上应用你想要的提交:

    git cherry-pick abcdefabcdef

    (abcdefabcdef是你想要应用的提交的sha1)

这是可能的(在部署的存储库中)

git fetch
git checkout origin/master -- path/to/file

fetch将下载所有最近的更改,但不会将其放在当前签出的代码(工作区域)中。

签出将使用下载的更改中的特定文件更新工作树(origin/master)。

至少这对我来说是一些小的错别字修复,在那里创建一个分支等只是改变一个文件中的一个词感觉很奇怪。

或者git stash(如果你有变化)在你所在的分支,checkout master,拉取最新的变化,抓取该文件到你的桌面(或整个应用程序)。检查您所在的分支。Git stash应用回您所在的状态,然后手动修复更改或拖动它替换文件。

这种方法不是很酷,但如果你们想不出其他方法的话,它绝对管用。

git archive --format=zip --remote=ssh://<user>@<host>/repos/<repo name> <tag or HEAD> <filename> > <output file name>.zip

我想我找到了一个简单的破解方法。

删除本地存储库上的文件(希望从远程服务器中的最新提交更新的文件)

然后执行git pull

因为删除了文件,所以不会有冲突

以下代码为我工作:

git fetch
git checkout <branch from which file needs to be fetched> <filepath>

对于Git 2.23(2019年8月)和新的(仍处于实验阶段)命令git restore,见“如何重置所有文件从工作目录,而不是从暂存区?”,这将是:

git fetch
git restore -s origin/master -- path/to/file
其思想是:git restore只处理文件,而不是像git checkout那样处理而且分支的文件 参见"git checkout迷惑":这就是git switch出现的地方)


codersam添加在评论中:

在我的情况下,我想从我的上游获取数据(从我分叉) 所以改成

git restore -s upstream/master -- path/to/file

这对我很管用

git checkout origin/develop file_name.php

我的英文很烂,我给你列出步骤: )我的英语很糟糕。我将为你列出步骤):

git checkout master
git pull --rebase
git checkout dev
git checkout master ./app/file.py
< p >机器翻译: 如果您在dev分支中开发,则在替换文件后合并主分支并推送它。 例如:替换app/file.py.