场景:
- 我在本地的单个文件中进行了一些更改,然后运行
git add
,git commit
然后git push
- 该文件被推送到远程原始主存储库
- 我有另一个本地存储库,该存储库是通过Capistrano使用该远程存储库中的“ remote_cache”方法部署的
- 现在,我不想部署整个应用程序,而只是更新/签出该单个文件。
用git有可能吗?我找不到任何可行的方法,也无法弄清楚。有了SVN,我就做了svn up file
,瞧。
场景:
git add
,git commit
然后git push
用git有可能吗?我找不到任何可行的方法,也无法弄清楚。有了SVN,我就做了svn up file
,瞧。
Answers:
可以这样做(在已部署的存储库中)
git fetch
git checkout origin/master -- path/to/file
提取操作将下载所有最近的更改,但不会将其放入您当前签出的代码(工作区)中。
检出将使用下载的更改(origin/master
)中的特定文件更新工作树。
至少对于那些小的拼写错误,这对我来说是有效的,在其中创建分支等只是为了更改文件中的一个单词而感到很奇怪。
git status
我看来它们是Changes to be committed:
-意思是,我需要再次提交它们?(只是指出我想刷新单个未修改的文件,但回购本身在另一台计算机上被修改了)
以下代码为我工作:
git fetch
git checkout <branch from which file needs to be fetched> <filepath>
git archive --format=zip --remote=ssh://<user>@<host>/repos/<repo name> <tag or HEAD> <filename> > <output file name>.zip
git archive --remote=https://github.com/git/git.git master:git/contrib/completion git-completion.bash | tar -x
给我错误消息:fatal: Operation not supported by protocol.
tar
:s 相结合--to-stdout
,git archive --remote="gitolite3@<host>:<repo>" <tag> <file> | tar xf - --to-stdout
使用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
含义)
就我而言,我想从上游(我从中派生)获取数据。
因此,只需更改为:git restore -s upstream/master -- path/to/file
git restore -s upstream/master -- path/to/file
您可以做的是:
更新您的本地git仓库:
git fetch
建立一个本地分支并在其上签出:
git branch pouet && git checkout pouet
在此分支上应用所需的提交:
git cherry-pick abcdefabcdef
(abcdefabcdef是您要应用的提交的sha1)
git checkout -b pouet
。
我想我发现了一个容易破解的方法。
删除本地存储库中的文件(要从远程服务器中的最新提交更新的文件)
然后做一个 git pull
因为文件被删除,所以不会有冲突