从git中提取特定的提交/文件

从git中提取特定的提交/文件,git,version-control,Git,Version Control,我在git存储库中做了两次提交,并将它们推送到git服务器 这两个提交是 在第一个提交文件中,提交了一个 在第二次提交中,提交了文件B 现在在另一个开发服务器上,我只想从git服务器中提取第一个提交或文件。如何做到这一点?这没有多大意义-如果你提交了文件,那么你的回购协议中也有这些文件 也许这就是你想要的 git checkout -- FileAOnly 或 首先,在开发服务器上,需要从git服务器获取提交列表,如下所示: git fetch origin master (or what

我在git存储库中做了两次提交,并将它们推送到git服务器

这两个提交是

  • 在第一个提交文件中,提交了一个
  • 在第二次提交中,提交了文件B

现在在另一个开发服务器上,我只想从git服务器中提取第一个提交或文件。如何做到这一点?

这没有多大意义-如果你提交了文件,那么你的回购协议中也有这些文件

也许这就是你想要的

git checkout -- FileAOnly


首先,在开发服务器上,需要从git服务器获取提交列表,如下所示:

git fetch origin master (or whatever branch you need)
然后有几个选项可以实现您的目标:

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

或者,拉动所有内容,然后硬重设为所需的提交(在本例中,就是头部之前的提交)。硬重置有效地将本地分支及时倒回所选的提交,将所有文件的状态更改为当时的状态(因此,在这种情况下,文件B要么被删除,要么返回到提交之前的状态,具体取决于它以前是否存在)


这将从repo中获取所有提交,然后在获取内容的头部之前将本地repo签出到提交。这里唯一的缺点是,您将处于“分离头”状态,并且必须在本地创建一个新分支,但这不是一个大问题。

用于从本地系统中的旧提交检索文件的签出。但我的问题是如何从git服务器中提取特定的提交/文件编辑的答案(+2个字符)origin/master可以用于签出吗?@Dau:git没有“旧提交”的概念。它只有表示该点上所有文件的提交。人类经常将分支的尖端称为“新”或“当前”,所有其他提交称为“旧”,但这是人类的意思。@Arafangion我知道,但我的问题的解决方案是什么?创建一个具有第一个提交但不具有第二个提交的新分支,并签出该分支?@ThongKuah谢谢,但这不是一个好办法吗?还有其他方法吗?thanx作为答案,我认为你的第一个选择对我来说是正确的,我在问问题时也在考虑选择第二个选择,但没有选择,因为我认为这是一个错误的方法。顺便说一句,让我检查一下,我心中的疑问是,如果我们“获取原始主机,那么它将立即对代码产生影响”,这就是我将要使用的实时服务器。那么文件B也会在服务器上出现一段时间?啊,我明白了!我没有意识到这是一个实时服务器。你说得对。在这种情况下,你应该选择你想要的承诺。或者,您可能只需签出该分支,就可以执行所需的特定提交。但是,我如何才能
cherry pick
提交不在服务器上,我必须将其拉到服务器上;因此,我将问题的标题拉到一个特定的提交上。这就是为什么要进行获取-这会将提交加载到服务器上,而不会将它们应用到工作树中。
git fetch origin master (or whatever branch you need)
git cherry-pick  <hash-of-commit-you-want>
git cherry-pick FETCH_HEAD^ (gets commit before the HEAD of what's been fetched)
git pull
git reset --hard HEAD^ (or git reset --hard <hash-of-commit-you-want>)
git fetch origin master
git checkout FETCH_HEAD^