为什么我需要强制git同步我的远程存储库?
问题描述:
我有一个本地存储库,我从远程存储库中克隆(全部在一台机器上)。我想确保我的远程存储库从我的本地存储库中选择了更改,所以我做了一个git push origin
。为什么我需要强制git同步我的远程存储库?
我将工作目录更改为远程存储库;更改已传播到日志文件(即,git log
显示更改),但我的实际工作目录未显示更改。我做了一个git checkout HEAD
,但CWD仍然没有改变。直到我做了git checkout --force HEAD
CWD同步。
我怀疑这是因为远程存储库不是裸存储库。所以有两个问题:
- 有没有一种方法可以让远程存储库在
git push
上自动同步(即丢弃本地更改)? - 为什么我需要使用
--force
才能让它同步?什么应该是同步它的过程?
答
如果你推(以非裸)回购成功,这是因为:
- 要么你推这是未签出在遥控器上回购了分公司(非裸远程回购)
- 或
receive.denyCurrentBranch
是在git config
在后者的情况下设置为false
或ignore
,任何当前的局部修改将不会被该推擦除。
只有git checkout --force
会将工作目录重置为由HEAD
引用的实际索引内容。
确保两个非裸露回购站之间同步的常用方法是通过添加一个中间裸回购(您推送到)后接收挂钩将实际远程回购(非裸露回购)和从更新的裸回购中拉。
通常的例子:Using Git to manage a web site,这是我在使用:
- “Push to remote server and Github”
- “How to reset staged changes on the remote after a push?”
- “How push directly to remote server just using push?”
当你拉,一定要取消设置GIT_DIR
:参见“Calling 'git pull
' from a git post-update
hook”