Skip to content

实战-强制推送git仓库后2台pc同步数据方法-20250404(测试成功)

实战-强制推送git仓库后2台pc同步数据方法-20250404(测试成功)

1、故障现象

最近在倒腾一个静态博客,作者在持续迭代,自己想要测试新代码的最新效果,于是在2台pc之间同步自己做了更改后仓库代码。(it pc,work pc 2台电脑上同一个仓库代码同步问题)

本人在it-pc 上强制推送一个git仓库后,在另一台pc上拉取时报错了(同一个仓库),该如何解决呢?

bash
26752@OneMINGW64/d/vitepress-theme-teek-one-private(master)$gitpullremote:Enumeratingobjects:1561,done.remote:Countingobjects:100%(1561/1561),done.remote:Compressingobjects:100%(1331/1331),done.remote:Total1561(delta 211),reused 1457 (delta164),pack-reused 0 (from0)Receivingobjects:100%(1561/1561),17.65 MiB |41.00KiB/s,done.Resolvingdeltas:100%(211/211),done.Fromgitee.com:onlyonexl/vitepress-theme-teek-one-private+48f0635...6d72b84master->origin/master(forced update)fatal:refusingtomergeunrelatedhistories26752@OneMINGW64/d/vitepress-theme-teek-one-private(master)$gitpullfatal:refusingtomergeunrelatedhistories26752@OneMINGW64/d/vitepress-theme-teek-one-private(master)$gitpullfatal:refusingtomergeunrelatedhistories

2、gpt

从错误信息 fatal:refusing to merge unrelated histories可以看出,Git 拒绝合并两个不相关的历史记录。这通常发生在以下情况:

  • 你本地仓库的历史记录与远程仓库的历史记录完全不同(例如,本地仓库是新建的,或者远程仓库被强制重置过)。
  • 你尝试拉取或合并的分支与当前分支的历史记录没有共同祖先。

以下是解决这个问题的几种方法:


一、允许合并不相关的历史记录

如果你确定需要合并不相关的历史记录,可以使用 --allow-unrelated-histories参数强制合并。

1. 使用 git pull合并

运行以下命令:

bash
gitpulloriginmaster--allow-unrelated-histories

2. 使用 git merge合并

如果 git pull仍然报错,可以手动拉取远程分支并合并:

bash
gitfetchorigingitmergeorigin/master--allow-unrelated-histories

3. 解决冲突

如果合并过程中出现冲突,Git 会提示你手动解决冲突。解决冲突后,运行以下命令完成合并:

bash
gitadd.gitcommit

二、强制覆盖本地分支(这个符合我的需求)(方案1)(推荐)❤️

如果你不需要保留本地的历史记录,可以直接用远程分支覆盖本地分支。

1. 重置本地分支

运行以下命令:

bash
gitfetchorigingitreset--hardorigin/master
  • 注意:这会丢弃本地所有未提交的更改,请谨慎操作。

2. 清理本地仓库

如果重置后仍然有问题,可以清理本地仓库并重新拉取:

bash
gitclean-fdgitpulloriginmaster

三、重新克隆仓库(方案2)

如果以上方法都无法解决问题,可以删除本地仓库并重新克隆:

bash
cd..rm-rfvitepress-theme-teek-one-privategitclonehttps:gitreset--hardorigin/master
  • 注意:这会丢弃本地所有未提交的更改,请谨慎操作。

2. 清理本地仓库

如果重置后仍然有问题,可以清理本地仓库并重新拉取:

bash
gitclean-fdgitpulloriginmaster

自己测试记录:

1.检查下状态

bash
26752@OneMINGW64/d/vitepress-theme-teek-one-private(master)$gitpull26752@OneMINGW64/d/vitepress-theme-teek-one-private(master)$gitremote-vorigingit@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git(fetch)origingit@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git(push)26752@OneMINGW64/d/vitepress-theme-teek-one-private(master)$gitbranch-av*master 48f0635 [ahead 21,behind 8] update dataremotes/origin/HEAD->origin/masterremotes/origin/master6d72b84commitdata26752@OneMINGW64/d/vitepress-theme-teek-one-private(master)$gitlog--oneline48f0635(HEAD ->master) update data5e3d453updatedata136da12updatedatadbcb70fupdatedatad61922dupdatedata0da6eebupdatedataebd3dedupdatedatab496d1eupdatedatad7d0caeupdatedata1429cccupdatedata

2.强制覆盖本地

bash
gitfetchorigingitreset--hardorigin/master
  • 注意:这会丢弃本地所有未提交的更改,请谨慎操作。

3.验证

感觉是OK了哦:

bash
26752@OneMINGW64/d/vitepress-theme-teek-one-private(master)$gitstatusOnbranchmasterYourbranchisuptodatewith'origin/master'.nothingtocommit,workingtreeclean26752@OneMINGW64/d/vitepress-theme-teek-one-private(master)$gitpullAlreadyuptodate.26752@OneMINGW64/d/vitepress-theme-teek-one-private(master)$gitremote-vorigingit@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git(fetch)origingit@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git(push)26752@OneMINGW64/d/vitepress-theme-teek-one-private(master)$gitlog--oneline6d72b84(HEAD ->master,origin/master,origin/HEAD) commit data84127b8commitdata6628c87commitdata5d6aadfupdatedata654cdf4updatedata
  • 可以看到,gitee这里最新提交commit id和work pc上本地仓库的一致,完美。

  • 本地构建下观察效果

4、总结

提示

以下适用于Teeker博客迭代更新时,2台pc间同步仓库代码环境。

(1)it-pc上,将作者最新仓库修改完成后,直接强制推送到自己的私有库

bash
cd/d/mkdirteeker-2025.3.14cd/d/teeker-2025.3.14/vitepress-theme-teek-one-privaterm-rf.gitgitinitgitadd-Agitcommit-m"03.14 first commit"gitremoteaddorigingit@gitee.com:onlyonexl/vitepress-theme-teek-one-private.gitgitpush-uorigin"master"--force

(2)work-pc上,从远程私有仓库强制覆盖本地分支

bash
cd/d/vitepress-theme-teek-one-privategitfetchorigingitreset--hardorigin/mastergitstatusgitpullgitstatus