git - 从 git 中 pull 特定的提交/文件

标签 git version-control

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

两个提交是

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

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

最佳答案

首先,在您的开发服务器上,您需要像这样从 git 服务器获取提交列表:

git fetch origin master (or whatever branch you need)

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

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

git cherry-pick  <hash-of-commit-you-want>

在这种特殊情况下,你可以这样做

git cherry-pick FETCH_HEAD^ (gets commit before the HEAD of what's been fetched)

或者, pull 所有内容,然后硬重置为您想要的提交(在本例中为 HEAD 之前的提交)。硬重置有效地将您的本地分支及时倒回到选定的提交,将所有文件的状态更改为当时的状态(因此在这种情况下,文件 B 将被删除,或者回到之前的状态提交,取决于它以前是否存在)。

git pull
git reset --hard HEAD^ (or git reset --hard <hash-of-commit-you-want>)

我更喜欢第二个选项,因为如果你不小心, cherry-pick 可能会产生一些链式 react 。我相信它为提交创建了一个新的散列,因此精心挑选的提交和原始提交并不相同。恐怕我现在没有时间仔细阅读并确认陷阱到底是什么,但我强烈建议您在决定使用它时亲自调查一下。

编辑 - 另一个解决方案(假设这是一个实时服务器,并且文件 B 在任何时候出现在服务器上都是 Not Acceptable )是执行以下操作:

git fetch origin master
git checkout FETCH_HEAD^

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

关于git - 从 git 中 pull 特定的提交/文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8921739/

相关文章:

java - 版本控制数据库的正确策略

version-control - 不同分支版本控制的 Maven 最佳实践 [开发、质量保证/预发布]

git - 推送后如何链接到 Redmine 中的 Git 提交

git - 在补丁文件中突出显示添加/删除的行,忽略移动

git - 文件未显示在远程存储库中

svn - 维护一组不提交给 SCM 的小改动

version-control - 如何在版本控制系统中加入两个文件

svn - 如何实用地控制配置文件的版本?

git - SSH 注册机 "no such file or directory"

git - 如何在不 pull 的情况下将更改推送到github