489

场景:

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

这对git有可能吗?我找不到任何可行的方法,也无法弄清楚。使用 SVN,我刚刚做了svn up file,瞧。

4

8 回答 8

1111

可以做(在部署的存储库中)

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

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

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

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

于 2010-12-13T10:15:34.140 回答
68

以下代码对我有用:

git fetch
git checkout <branch from which file needs to be fetched> <filepath> 
于 2018-07-30T12:19:48.453 回答
63

使用 Git 2.23(2019 年 8 月)和新的(仍然是实验性的)命令git restore,在“如何从工作目录而不是暂存区重置所有文件? ”中看到,这将是:

git fetch
git restore -s origin/master -- path/to/file

这个想法是:git restore只处理文件,而不是文件分支git checkout
请参阅“ Confused bygit checkout ”:这就是git switch进来的地方)


codersam在评论中添加:

就我而言,我想从上游(我从中分叉)获取数据。
所以就改成:

git restore -s upstream/master -- path/to/file
于 2019-09-19T21:14:56.060 回答
19
git archive --format=zip --remote=ssh://<user>@<host>/repos/<repo name> <tag or HEAD> <filename> > <output file name>.zip
于 2015-09-23T05:35:31.497 回答
10

你可以做的是:

  1. 更新您的本地 git 存储库:

    git fetch

  2. 建立一个本地分支并在其上结帐:

    git branch pouet && git checkout pouet

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

    git cherry-pick abcdefabcdef

    (abcdefabcdef 是您要应用的提交的 sha1)

于 2010-07-26T13:16:39.150 回答
8

简直对我有用

git checkout origin/develop file_name.php
于 2021-08-13T08:32:52.787 回答
2

或 git stash(如果您有更改)在您所在的分支上,结帐 master,拉取最新更改,将该文件抓取到您的桌面(或整个应用程序)。检查您所在的分支。Git stash 应用回您所处的状态,然后手动修复更改或将其拖动以替换文件。

这种方式不是很酷,但如果你们想不出其他任何东西,它就可以正常工作。

于 2012-09-18T20:14:39.963 回答
-15

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

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

然后做一个git pull

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

于 2017-09-25T01:13:20.453 回答