一、问题描述
1.1 背景
本地仓库:yolov8_test
远程仓库:github.com:user_name/yolo-project.git
目标:将本地仓库的main.py文件推送到远程仓库
1.2 执行流程
先是使用SSH连接远程仓库
git remote add origin SSH路径(从远程仓库复制)
查看是否连接远程仓库
git remote -v
查看远程仓库的更新(看有哪些更新)
git fetch origin
拉取远程仓库使得本地仓库同步远程仓库的最新状态
git pull origin main
出现下面的错误
| 错误信息 | 错误类型 |
|---|---|
| ! [rejected] main -> main (non-fast-forward) | 远程领先,本地落后 |
| fatal: refusing to merge unrelated histories | 本地和远程无共同祖先 |
| error: The following untracked working tree files would be overwritten by merge: main1.py | 未跟踪文件与远程冲突 |
导致下面拉取不成功

二、根本原因分析
┌─────────────────────────────────────────────────────────┐
│ 远程仓库历史 (github) │
│ init → README.md → .gitignore → ... (有初始文件) │
│ │
│ 本地仓库历史 (D:\git_local_repository\...) │
│ init → 项目代码 → main1.py → ... (独立开发) │
│ │
│ ⚠️ 两个仓库没有共同祖先提交! │
│ ⚠️ 且 main1.py 在本地是"未跟踪"状态,远程也有同名文件 │
└─────────────────────────────────────────────────────────┘
核心原因:
-
远程仓库创建时自动生成了
README.md、.gitignore等初始文件 -
本地仓库是独立初始化的,两个仓库历史完全分叉
-
文件
main1.py在本地未执行git add,处于 untracked 状态,但远程合并需要覆盖它
三、解决方案
方案一:保留本地代码,合并不相关历史(推荐)
# 将冲突的未跟踪文件加入版本控制
git add main1.py
git commit -m "添加 main1.py 本地版本"
# 拉取远程并允许合并不相关历史
git pull origin main --allow-unrelated-histories
# 如有冲突,手动解决(编辑冲突文件,删除 <<<< ==== >>>> 标记)
git add <冲突文件>
git commit -m "合并远程 main 分支,解决冲突"
# 推送到远程
git push -u origin main
方案二:先备份本地文件,拉取远程后重新添加
# Step 1: 备份本地冲突文件
mv main1.py main1.py.local.backup
# Step 2: 拉取远程代码
git pull origin main --allow-unrelated-histories
# Step 3: 恢复本地文件(如有冲突需手动合并)
mv main1.py.local.backup main1.py
git add main1.py
git commit -m "恢复本地 main1.py"
git push origin main
四、预防建议
1. 新建项目推送到已有初始文件的远程仓库
先git clone克隆远程仓库,再添加代码
2. 本地已有项目要关联远程
远程创建空仓库(不勾选README),再 git push -u origin main
-u 是 --set-upstream 的简写。
作用 :建立本地分支和远程分支的关联关系,以后可以简化命令。
3. 多人协作
推送前先 git pull ,保持本地最新
4. 大文件(如:模型权重.pt)
使用Git LFS或云存储,不要直接放 Git