2012-01-19 121 views
9

我在git仓库做两次提交/文件和他们推到我的git服务器拉承诺从混帐

的两次提交的

  • 在第一次提交文件中的承诺
  • 在第二次提交的文件B致力于

现在其他开发服务器上我想只拉第一次提交或文件A F rom git服务器。这个怎么做 ?

+0

创建一个具有第一次提交但不是第二次的新分支,并检出该分支? –

+0

@ThongKuah谢谢,但它不是一个好方法?任何其他方式? – Dau

回答

0

这并没有多大意义 - 如果你提交的文件是你在回购库中有的话。

也许这是你想要的

git checkout -- FileAOnly 

或者

git checkout origin/master -- FileAonly 
+1

结帐用于从本地系统中的旧提交中检索文件。但我的问题是如何从git服务器拉特定的提交/文件 – Dau

+0

已编辑的答案(+2更多字符) –

+0

可以使用结帐签出/主用吗? – Dau

19

首先,你的开发服务器上,你需要从这样的混帐服务器上获取提交的名单:

git fetch origin master (or whatever branch you need) 

然后有几个选项来实现你想要的:

Cherry挑选第一个提交 - 这只是从另一个分支/回购中“选取”所选提交并将其应用到当前的本地分支。它可能非常有用,但应谨慎使用(见下文)。

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^ 

这将提取所有提交从回购,然后检查您的本地回购提交之前提交的提交。这里唯一的缺点是你将处于“独立头”状态,并且不得不在本地创建一个新的分支,但这不是一个大问题。

+0

thanx为答案,我认为你的第一个选择对我来说是正确的,我也考虑选择第​​二个选项时,当我问这个问题,但没有选择,因为我认为这是一个错误的方式。顺便说一句,让我检查 – Dau

+0

在我心中的疑问是,如果我们'取得原产主,那么它会立即对代码产生影响',这是我将要采取的拉活动服务器。所以文件B也会出现在服务器上一段时间? – Dau

+0

啊,我明白了!我没有意识到这是一个活的服务器。你是对的。在这种情况下,你应该选择你想要的提交。或者,您可能只需签出该分支直至您想要的特定提交。 –