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

相关推荐
wh_xia_jun1 天前
Git 分支合并操作备忘录
git
满天星83035771 天前
【Git】原理及使用(三)(分支管理)
linux·git
像风一样的男人@1 天前
warning: could not find UI helper ‘git-credential-manager-ui‘
git·ui
代钦塔拉2 天前
Git & GitHub 从入门到精通:全流程实战教程
git·github
晚风吹红霞2 天前
Linux下的趣味编程 —— 进度条、Git版本控制与GDB调试实战
linux·运维·git
xlq223222 天前
7.git
git
Ws_2 天前
Git + Gerrit 第六课:commit --amend、Patch Set 与 Change-Id
git
AIMath~2 天前
向github中上传文件过大超过50M怎么办
网络·git·github
AIMath~2 天前
如何将一个新的文件夹使用git 工具提交到github新仓库中
git·github
满天星83035772 天前
【Git】原理及使用(二) (版本回退)
linux·git