我有一个本地存储库,我已从远程存储库(所有在一台计算机上)克隆。我想确保我的远程存储库从我的本地存储库中选择了更改,因此我执行了git push origin
。
我将工作目录更改为远程存储库;更改已传播到日志文件(即执行git log
显示更改)但我的实际工作目录未显示更改。我做了一个git checkout HEAD
,但CWD仍未改变。直到我做了git checkout --force HEAD
,CWD才同步。
我怀疑这种情况正在发生,因为远程存储库不是裸存储库。所以有两个问题:
git push
?--force
让它同步?什么 应该是同步它的过程?答案 0 :(得分:2)
如果您的推送(非裸)repo成功,那是因为:
receive.denyCurrentBranch
在git config
false
或ignore
在后一种情况下,任何当前的本地修改都不会被该推送删除
只有git checkout --force
会将工作目录重置为HEAD
引用的实际索引内容。
确保两个非裸仓库之间同步的通常方法是添加一个中间裸仓库(你推送)和一个后接收钩子,它将进入实际的远程仓库(非裸仓)和<从更新的裸仓库中拉出 通常的例子:Using Git to manage a web site,我在其中使用:
当您拉动时,请务必取消设置GIT_DIR
:请参阅“Calling 'git pull
' from a git post-update
hook”