繁体   English   中英

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

[英]pull specific commit/file from git

我已经在我的git存储库中进行了两次提交并将它们推送到我的git服务器

两个提交是

  • 在第一个提交文件A中提交
  • 在第二个提交文件B中提交

现在在另一个开发服务器上我想从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM