我已经在我的git存储库中进行了两次提交并将它们推送到我的git服务器
两次提交
现在在另一个开发服务器上我想从git服务器中只提取第一个提交或FILE A.怎么做?
答案 0 :(得分:19)
首先,在您的开发服务器上,您需要从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到提交。这里唯一的缺点是你将处于“超级头”状态,并且必须在本地创建一个新的分支,但这不是一个大问题。
答案 1 :(得分:0)
这没有多大意义 - 如果您提交文件,无论如何都要在回购邮件中提供这些文件。
也许这就是你想要的
git checkout -- FileAOnly
或
git checkout origin/master -- FileAonly