B
实战-强制推送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