git - 当你是 git 的原始仓库时,你如何进行本地 pull ?

标签 git

我有一台服务器,我在其中设置了 Git 存储库。从我的客户那里,我可以执行

git pull origin

git push origin

并且我的更改已正确推送/pull 到远程 Git 服务器。我还需要能够在服务器本身上 check out 项目。我在设置时没有使用 init --bare,因为我明确希望在服务器上也有一个工作副本。

但是,当我运行 git pull 时,我收到一条消息 fatal: Where do you want to fetch from today?。我如何检查服务器上本地工作副本的最新更改?

最佳答案

修复工作副本以匹配推送的最新更改

git checkout HEAD

可能就是您要找的。

来自客户端的推送改变了索引而不是工作文件,所以当 git 记录向前移动时,你的工作文件没有改变。为了只删除工作文件以支持最新版本,您需要检查推送到服务器的最新版本。

...编辑:

使用两个非裸仓库

我刚刚意识到,我为您提供了理解问题的信息(索引隐式更改,但工作文件仅显式更改),但不一定是解决问题的最佳方法。这是我过去所做的,如果您不想涉及中央裸存储库,我建议您这样做:

在服务器上:

git branch staging
git checkout staging

在客户端机器上:

Hack away at some changes in master, then push to the server.

在服务器上: git rebase master (显式更新您的暂存分支以匹配更新后的索引。)

最后,如果您想在服务器上进行更改(错误修复,您有什么),您还需要将这些更改同步到 master,您可以通过以下方式完成:

在服务器上:

Commit changes made on the staging branch.
git rebase master
git checkout master
git rebase staging
git checkout staging

好了,master 中的每个提交都将处于暂存状态,并且在暂存分支中进行的每个提交都将是 master 中的最新提交。

即使使用非裸露的中央存储库,这种工作流程也应该适合您。本质上,您将保留服务器的 master 分支,并使暂存分支成为服务器的工作副本。

使用中央裸仓库更干净

通常,尽管网络中的 2 点看起来最简单,但拥有一个“集中式”裸存储库通常更简单,它允许您始终将推送和 pull 到该位置,而无需真正考虑它。我还推荐您可以从 github.com 获得的 Web 代码可视化的好处。出于这个原因(对于开源的东西是免费的,我将它用于我最近所做的一切)。

关于git - 当你是 git 的原始仓库时,你如何进行本地 pull ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1756600/

相关文章:

php : The term 'php' is not recognized as the name of a cmdlet, 函数、脚本文件或可运行程序

git - 使用 git rev-parse 获取同一分支中的提交范围

git - 如何从 commit-msg Hook 中提示用户?

git - 如何在不使用 .gitignore 的情况下不跟踪 Git 中添加的、未提交的文件

Git,如何让我的主镜像我的开发分支?

git:将一些文件的历史拆分到一个单独的分支中

git - git commit的--date参数的格式是什么

django - 如何将所有迁移/添加到 django 中的 git .gitignore 文件?

git - Cygwin 上的 Intellij 差异和 merge 工具

git - Gerrit 不会 push 。错误 : No common ancestry