为什么我需要强制 Git 同步我的远程仓库?

3
我有一个本地仓库,是从远程仓库克隆而来的(都在同一台机器上)。我想确保我的远程仓库从本地仓库中获取了更改,所以我执行了git push origin
我将工作目录更改为远程仓库;更改已经传播到日志文件中(即执行git log显示更改),但我的实际工作目录没有显示更改。我执行了git checkout HEAD,但CWD仍然没有改变。直到我执行了git checkout --force HEAD,CWD才同步起来。
我怀疑这是因为远程仓库不是裸仓库。所以有两个问题:
  1. 是否有一种方法可以使远程仓库在git push时自动同步(即放弃本地更改)?
  2. 为什么我需要使用--force才能使其同步?应该是什么样的同步过程?
1个回答

2
如果您成功地将推送(到非裸库)的操作完成,原因可能是:
  • 您推送了一个在远程库(非裸远程库)上未被检出的分支
  • 或者receive.denyCurrentBranchgit config中设置为falseignore
在后一种情况下,该推送不会删除任何当前本地修改。
只有git checkout --force才能将工作目录重置为由HEAD引用的实际索引内容。
确保两个非裸库之间同步的常规方法是添加一个中间的裸库(向其中进行推送),并使用post-receive钩子从更新的裸库中进入实际的远程库(非裸库)进行拉取。
通常的例子是使用Git管理网站,我在其中使用。

当你正在拉取时,请确保取消设置GIT_DIR:参见 "从git post-update钩子中调用'git pull'"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接