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

2024-01-27

我有一个从远程存储库克隆的本地存储库(全部在一台计算机上)。我想确保我的远程存储库从本地存储库中选择了更改,所以我做了一个git push origin.

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

我怀疑发生这种情况是因为远程存储库不是裸存储库。那么两个问题:

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

如果您的推送(到非裸)存储库成功,这是因为:

  • 要么您推送了一个未在远程存储库上签出的分支(非裸远程存储库)
  • or receive.denyCurrentBranch被设置为false or ignore in the git config http://git-scm.com/docs/git-config

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

确保两个非裸存储库之间同步的常用方法是添加一个带有 post-receive 挂钩的中间裸存储库(您推送到的),该钩子将转到实际的远程存储库(非裸存储库)并pull来自更新的裸仓库。
通常的例子:使用 Git 管理网站 http://toroid.org/ams/git-website-howto,我用在:

  • "推送到远程服务器和Github https://stackoverflow.com/questions/10891409/push-to-remote-server-and-github/10892791#10892791"
  • "推送后如何重置遥控器上的分阶段更改? https://stackoverflow.com/questions/10086405/how-to-reset-staged-changes-on-the-remote-after-a-push/10087795#10087795"
  • "如何使用push直接推送到远程服务器? https://stackoverflow.com/questions/10905739/how-push-directly-to-remote-server-just-using-push/10905899#10905899"

当您拉动时,请确保取消设置GIT_DIR: see "呼唤'git pull' 来自 gitpost-update hook https://stackoverflow.com/questions/3542854/calling-git-pull-from-a-git-post-update-hook/3542926#3542926"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐