为什么我需要强制git同步我的远程存储库?

时间:2012-07-21 13:09:17

标签: git push

我有一个本地存储库,我已从远程存储库(所有在一台计算机上)克隆。我想确保我的远程存储库从我的本地存储库中选择了更改,因此我执行了git push origin

我将工作目录更改为远程存储库;更改已传播到日志文件(即执行git log显示更改)但我的实际工作目录未显示更改。我做了一个git checkout HEAD,但CWD仍未改变。直到我做了git checkout --force HEAD,CWD才同步。

我怀疑这种情况正在发生,因为远程存储库不是裸存储库。所以有两个问题:

  1. 有没有办法可以让远程存储库自动同步(即丢弃本地更改)git push
  2. 为什么我需要使用--force让它同步?什么 应该是同步它的过程?

1 个答案:

答案 0 :(得分:2)

如果您的推送(非裸)repo成功,那是因为:

  • 要么推送了一个未在远程仓库中检出的分支(非裸远程仓库)
  • receive.denyCurrentBranchgit config
  • 中设为falseignore

在后一种情况下,任何当前的本地修改都不会被该推送删除 只有git checkout --force会将工作目录重置为HEAD引用的实际索引内容。

确保两个非裸仓库之间同步的通常方法是添加一个中间裸仓库(你推送)和一个后接收钩子,它将进入实际的远程仓库(非裸仓)和<从更新的裸仓库中拉出 通常的例子:Using Git to manage a web site,我在其中使用:

当您拉动时,请务必取消设置GIT_DIR:请参阅“Calling 'git pull' from a git post-update hook