![](/img/trans.png)
[英]failed to git pull same file from specific commit id in local machine?
[英]pull specific commit/file from git
我已经在我的git存储库中进行了两次提交并将它们推送到我的git服务器
两个提交是
现在在另一个开发服务器上我想从git服务器只提取第一个提交或FILE A. 这该怎么做 ?
首先,在您的开发服务器上,您需要从git服务器获取提交列表,如下所示:
git fetch origin master (or whatever branch you need)
然后有几个选项来实现你想要的:
Cherry选择第一个提交 - 这只是从另一个分支/ repo“摘取”所选提交并将其应用于当前的本地分支。 它可能非常有用,但应谨慎使用(见下文)。
git cherry-pick <hash-of-commit-you-want>
在这种特殊情况下,你可以这样做
git cherry-pick FETCH_HEAD^ (gets commit before the HEAD of what's been fetched)
或者,拉出所有内容,然后对您想要的提交进行硬重置(在本例中是HEAD之前的那个)。 硬重置有效地将您的本地分支回溯到所选的提交,将所有文件的状态更改为当时的状态(因此在这种情况下,文件B将被删除,或者返回到之前的状态提交,取决于它以前是否存在)。
git pull
git reset --hard HEAD^ (or git reset --hard <hash-of-commit-you-want>)
我更喜欢第二种选择,因为如果你不小心,樱桃采摘会产生一些影响。 我相信它会为提交创建一个新的哈希,所以挑选出来的提交和原始提交并不相同。 我担心我现在没有时间阅读并准确确认存在的缺陷,但如果您决定使用它,我强烈建议您自己调查一下。
编辑 - 另一种解决方案(假设这是一个实时服务器,并且文件B在任何时候出现在服务器上是不可接受的)是执行以下操作:
git fetch origin master
git checkout FETCH_HEAD^
这将从repo中获取所有提交,然后在获取内容的HEAD之前检查您的本地repo到提交。 这里唯一的缺点是你将处于“超级头”状态,并且必须在本地创建一个新的分支,但这不是一个大问题。
这并没有多大意义 - 如果您提交了文件,那么无论如何都要将它们放在您的仓库中。
也许这就是你想要的
git checkout -- FileAOnly
要么
git checkout origin/master -- FileAonly
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.