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

相关推荐
CSDN_RTKLIB16 小时前
多次git add拆解
git
CSDN_RTKLIB16 小时前
git push -u
git
xiaoxiang960918 小时前
Git 分支同步实战:`merge -X theirs` 与完全合并方案
数据库·git·elasticsearch
李可以量化19 小时前
Redis Client 从了解到精通(二)下:String 类型进阶操作全解
redis·git·python·量化交易·qmt
wy31362282119 小时前
Git——ignore让项目的 target 目录真正被忽略(忽略其他文件也是同样的道理)
开发语言·git
deli00700721 小时前
正则表达式可视化测试工具:输入即匹配,高亮一目了然
git·测试工具·正则表达式
爱莉希雅&&&21 小时前
Git 版本控制完整学习笔记
笔记·git·学习
CSDN_RTKLIB1 天前
Git 修改绑定远程仓库
git
青春易逝丶1 天前
Git相关
git