Git:如何从远程源主服务器更新/签出单个文件?

for*_*sth 318 git git-checkout

场景:

  1. 我在本地对一个文件进行了一些更改并运行git add,git commit并且git push
  2. 该文件被推送到远程源主存储库
  3. 我有另一个本地存储库,通过Capistrano与该远程存储库中的"remote_cache"方法一起部署
  4. 现在我不想部署整个应用程序,只需更新/签出该单个文件.

拜托,这对git来说有点可能吗?我无法找到任何有用的东西,也无法找到它.有了SVN我就做了svn up file,瞧.

我会很高兴得到任何帮助,谢谢!

小智 834

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

git fetch
git checkout origin/master -- path/to/file
Run Code Online (Sandbox Code Playgroud)

获取将下载所有最近的更改,但它不会将其放在当前检出的代码(工作区域)中.

结帐将使用下载的更改(origin/master)中的特定文件更新工作树.

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

  • @Mymozaaa双短划线表示后面是文件名.这是为了防止git将你的文件名解释为一个分支,在你不幸的情况下,你有两个同名的. (18认同)
  • 在这个命令中,` - `有什么用? (14认同)
  • 那么获取的代码会发生什么? (5认同)
  • 这是我正在寻找的答案. (5认同)

Sha*_*thi 25

以下代码为我工作:

     git fetch
     git checkout <branch from which file needs to be fetched> <filepath> 
Run Code Online (Sandbox Code Playgroud)


小智 25

简单,它对我有用

git checkout origin/develop file_name.php
Run Code Online (Sandbox Code Playgroud)


Dmi*_*y R 18

git archive --format=zip --remote=ssh://<user>@<host>/repos/<repo name> <tag or HEAD> <filename> > <output file name>.zip
Run Code Online (Sandbox Code Playgroud)

  • 这是通过 ssh 克隆的 repos 的一个很好的解决方案,但似乎这不受 https 支持:`git archive --remote=https://github.com/git/git.git master:git/contrib/completion git-completion .bash | tar -x` 给我错误消息:`fatal:协议不支持操作。` (2认同)

小智 7

你能做的是:

  1. 更新您当地的git仓库:

    git fetch

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

    git branch pouet && git checkout pouet

  3. 在此分支上应用您想要的提交:

    git cherry-pick abcdefabcdef

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

  • 顺便说一句,你的第二步也可以在一个命令中完成`git checkout -b pouet`. (4认同)
  • 'pouet'是此示例的最佳分支名称. (4认同)

Von*_*onC 5

使用Git 2.23(2019年8月)和新的(仍在试验中的)命令git restore(如“ 如何从工作目录而不是登台区域重设所有文件? ”中所示),将是:

git fetch
git restore -s origin/master -- path/to/file
Run Code Online (Sandbox Code Playgroud)

这个想法是:git restore只处理文件,而不处理文件分支git checkout
请参阅“ 混淆者git checkout ”:这就是其中的git switch含义)

  • 这个命令终于存在了,真是让人松了口气…… git-cluefull 的人以前在做什么?我正在恢复整个内容并复制我需要的单个文件,但这很痛苦。 (2认同)
  • 根据我的测试,“restore”效果更好,因为它将文件放在工作区域中,而不是像“checkout”那样放在暂存区域中。 (2认同)

小智 5

git checkout master
git pull --rebase
git checkout dev
git checkout master ./app/file.py
Run Code Online (Sandbox Code Playgroud)

如果是在dev分支开发,替换文件后合并master分支并push。例如,替换 app/file.py。