如何在两个独立系统初始化Git仓库并同步本地更新至服务器?
解决方案
针对你的场景(服务器存旧版本,本地是更新后的版本,两边都独立初始化了Git仓库),有两种可行的处理方式,按需选择:
方式一:保留服务器初始提交(合并无关历史)
如果需要保留服务器上基于旧版本的初始提交记录,按以下步骤操作:
- 本地仓库执行拉取命令,允许合并无关历史:
git pull origin master --allow-unrelated-histories - 执行后会打开编辑器让你填写合并提交信息,直接保存退出即可(默认信息足够)。若合并时出现文件冲突,选择保留本地的新版本文件即可——毕竟你的本地是更新后的内容。
- 最后推送合并后的分支到服务器:
git push --set-upstream origin master
方式二:用本地新版本直接覆盖服务器仓库(更高效)
因为服务器上的版本是旧的,且你只需要保留本地最新修改,这种方式更简单:
- 服务器端操作:删除现有裸仓库,重新创建空的裸仓库:
rm -rf project.git git init --bare project.git - 本地仓库操作:
- 确保已完成本地文件提交(
git add .+git commit -m "提交信息") - 添加远程仓库(已添加过可跳过):
git remote add origin git@server:project.git - 强制推送本地master分支到服务器:
git push --force --set-upstream origin master
- 确保已完成本地文件提交(
失败原因说明
- 推送失败是因为服务器和本地仓库是完全独立初始化的,两者没有共同提交祖先,Git默认拒绝非快进的推送(防止误操作)。
- 拉取时报错
fatal: refusing to merge unrelated histories是Git的安全机制,避免误合并无关仓库,加上--allow-unrelated-histories参数即可解除限制。
后续建议
- 正常开发流程:本地修改代码 →
git add .→git commit -m "描述修改内容"→git push。 - 单人使用仓库时,确保本地是最新版本再推送,基本不会遇到冲突。
- 定期备份服务器上的裸仓库,避免数据丢失。
内容的提问来源于stack exchange,提问作者TrisT
相关产品推荐
相关产品推荐

