我已经在我的 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/