Git多仓库协作中和并冲突问题:“不相关历史合并”+“问跟踪文件冲突”

一、问题描述

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 在本地是"未跟踪"状态,远程也有同名文件     │
└─────────────────────────────────────────────────────────┘

核心原因

  1. 远程仓库创建时自动生成了 README.md.gitignore 等初始文件

  2. 本地仓库是独立初始化的,两个仓库历史完全分叉

  3. 文件 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

相关推荐
风若飞2 小时前
▎ 适用于完全没有 Git 经验的新手
git
时空自由民.4 小时前
git rebase简介
git
山西瀚辰信安科技有限公司4 小时前
git下载安装及使用
git·学习
梓沂5 小时前
pycharm Git 连接 GitHub 报错全记录:从 SSL 证书到 SSH 密钥,一步步踩坑与解决
git·pycharm·github
无小道5 小时前
Git版本控制及其原理:从入门到精通
git·企业
颂love6 小时前
Git的简单学习
git·学习
一个学Java小白6 小时前
git 如何免密提交之 基于 Gitee 的 SSH 配置教程
git
我是谁??6 小时前
ubuntu22.04在线安装docker和nvidia-container-toolkit
git·docker·github
Kessity6 小时前
Git标签管理
git