实战-强制推送git仓库后2台pc同步数据方法-20250404(测试成功)
实战-强制推送git仓库后2台pc同步数据方法-20250404(测试成功)
1、故障现象
最近在倒腾一个静态博客,作者在持续迭代,自己想要测试新代码的最新效果,于是在2台pc之间同步自己做了更改后仓库代码。(it pc,work pc 2台电脑上同一个仓库代码同步问题)
本人在it-pc 上强制推送一个git仓库后,在另一台pc上拉取时报错了(同一个仓库),该如何解决呢?
26752@One MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git pull
remote: Enumerating objects: 1561, done.
remote: Counting objects: 100% (1561/1561), done.
remote: Compressing objects: 100% (1331/1331), done.
remote: Total 1561 (delta 211), reused 1457 (delta 164), pack-reused 0 (from 0)
Receiving objects: 100% (1561/1561), 17.65 MiB | 41.00 KiB/s, done.
Resolving deltas: 100% (211/211), done.
From gitee.com:onlyonexl/vitepress-theme-teek-one-private
+ 48f0635...6d72b84 master -> origin/master (forced update)
fatal: refusing to merge unrelated histories
26752@One MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git pull
fatal: refusing to merge unrelated histories
26752@One MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git pull
fatal: refusing to merge unrelated histories
2、gpt
从错误信息 fatal: refusing to merge unrelated histories
可以看出,Git 拒绝合并两个不相关的历史记录。这通常发生在以下情况:
- 你本地仓库的历史记录与远程仓库的历史记录完全不同(例如,本地仓库是新建的,或者远程仓库被强制重置过)。
- 你尝试拉取或合并的分支与当前分支的历史记录没有共同祖先。
以下是解决这个问题的几种方法:
一、允许合并不相关的历史记录
如果你确定需要合并不相关的历史记录,可以使用 --allow-unrelated-histories
参数强制合并。
1. 使用 git pull
合并
运行以下命令:
git pull origin master --allow-unrelated-histories
2. 使用 git merge
合并
如果 git pull
仍然报错,可以手动拉取远程分支并合并:
git fetch origin
git merge origin/master --allow-unrelated-histories
3. 解决冲突
如果合并过程中出现冲突,Git 会提示你手动解决冲突。解决冲突后,运行以下命令完成合并:
git add .
git commit
二、强制覆盖本地分支(这个符合我的需求)(方案1)(推荐)❤️
如果你不需要保留本地的历史记录,可以直接用远程分支覆盖本地分支。
1. 重置本地分支
运行以下命令:
git fetch origin
git reset --hard origin/master
- 注意:这会丢弃本地所有未提交的更改,请谨慎操作。
2. 清理本地仓库
如果重置后仍然有问题,可以清理本地仓库并重新拉取:
git clean -fd
git pull origin master
三、重新克隆仓库(方案2)
如果以上方法都无法解决问题,可以删除本地仓库并重新克隆:
cd ..
rm -rf vitepress-theme-teek-one-private
git clone https://gitee.com/onlyonexl/vitepress-theme-teek-one-private.git
四、检查远程仓库状态
如果问题仍然存在,可能是远程仓库的历史记录被强制重置或修改。你可以检查远程仓库的提交历史:
git log origin/master
如果发现远程仓库的历史记录被修改,请联系仓库管理员确认是否需要同步。
五、总结
方法 | 适用场景 |
---|---|
允许合并不相关的历史记录 | 需要保留本地和远程的历史记录,并手动解决冲突。 |
强制覆盖本地分支 | 不需要保留本地历史记录,直接用远程分支覆盖。 |
重新克隆仓库 | 本地仓库无法修复,重新克隆是最简单的方法。 |
检查远程仓库状态 | 确认远程仓库是否被强制重置或修改。 |
根据你的需求选择合适的方法。如果还有其他问题,欢迎随时提问!
3、亲自测试
二、强制覆盖本地分支(这个符合我的需求)(方案1)
如果你不需要保留本地的历史记录,可以直接用远程分支覆盖本地分支。
1. 重置本地分支
运行以下命令:
git fetch origin
git reset --hard origin/master
- 注意:这会丢弃本地所有未提交的更改,请谨慎操作。
2. 清理本地仓库
如果重置后仍然有问题,可以清理本地仓库并重新拉取:
git clean -fd
git pull origin master
自己测试记录:
1.检查下状态
26752@One MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git pull
26752@One MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git remote -v
origin git@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git (fetch)
origin git@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git (push)
26752@One MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git branch -av
* master 48f0635 [ahead 21, behind 8] update data
remotes/origin/HEAD -> origin/master
remotes/origin/master 6d72b84 commit data
26752@One MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git log --oneline
48f0635 (HEAD -> master) update data
5e3d453 update data
136da12 update data
dbcb70f update data
d61922d update data
0da6eeb update data
ebd3ded update data
b496d1e update data
d7d0cae update data
1429ccc update data
2.强制覆盖本地
git fetch origin
git reset --hard origin/master
- 注意:这会丢弃本地所有未提交的更改,请谨慎操作。
3.验证
感觉是OK了哦:
26752@One MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
26752@One MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git pull
Already up to date.
26752@One MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git remote -v
origin git@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git (fetch)
origin git@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git (push)
26752@One MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git log --oneline
6d72b84 (HEAD -> master, origin/master, origin/HEAD) commit data
84127b8 commit data
6628c87 commit data
5d6aadf update data
654cdf4 update data
- 可以看到,gitee这里最新提交commit id和work pc上本地仓库的一致,完美。
- 本地构建下观察效果
4、总结
提示
以下适用于Teeker博客迭代更新时,2台pc间同步仓库代码环境。
(1)it-pc上,将作者最新仓库修改完成后,直接强制推送到自己的私有库
cd /d/
mkdir teeker-2025.3.14
cd /d/teeker-2025.3.14/vitepress-theme-teek-one-private
rm -rf .git
git init
git add -A
git commit -m"03.14 first commit"
git remote add origin git@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git
git push -u origin "master" --force
(2)work-pc上,从远程私有仓库强制覆盖本地分支
cd /d/vitepress-theme-teek-one-private
git fetch origin
git reset --hard origin/master
git status
git pull
git status